对象传播与对象分配

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

假设我有一个选项变量,我想设置一些默认值。

这两种选择的好处/缺点是什么?

使用对象展开

options = {...optionsDefault, ...options};

也可以使用Object.Assive@@

options = Object.assign({}, optionsDefault, options);
提问于
用户回答回答于

扩展语法

options = {...optionsDefault, ...options};

优势:

  • 如果在没有本机支持的环境中编写用于执行的代码,则可以只编译此语法(而不是使用PolyFill)。
  • 不那么冗长。

缺点:

  • 不是标准化的。
  • 文字不是动态的。
Object.assign()
options = Object.assign({}, optionsDefault, options);

优势:

  • 标准化。
  • 动态的。例子: 变功源={a:“A”},{b:“B”},{c:“C”};;Options=Object.转让人.Apply(Object,{}.Conat(来源);
  • 更详细。

缺点:

  • 如果在没有本机支持的环境中编写用于执行的代码,则需要填充。
这就是让我怀疑的承诺。

这和你的要求没有直接关系。那个代码没有使用Object.assign(),它使用的是用户代码(object-assign)那也是一样的。他们似乎正在用Babel编译代码(并将其捆绑在Webpack中),这就是我所说的:只需编译的语法。他们显然更喜欢这样,而不是必须包括object-assign作为一种依赖关系进入他们的构建。

用户回答回答于

对象扩展操作符,在浏览器中不能工作,因为它还不是任何ES规范的一部分,只是一个建议。唯一的选择是用Babel(或类似的东西)编译它。

正如看到的,它只是Object.Ast({})上的语法糖。

据我所见,这些是重要的不同之处。

  • 在大多数浏览器中都可以工作(没有编译)
  • ...对象没有标准化
  • ...保护您不可能意外地更改对象。
  • ...将填充对象。在没有它的浏览器中分配
  • ...需要更少的代码来表达相同的想法

扫码关注云+社区