小编典典

对象传播与Object.assign

javascript

假设我有一个options变量,并且想要设置一些默认值。

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

使用对象传播

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

或使用Object.assign

options = Object.assign({}, optionsDefault, options);

这就是让我感到奇怪的承诺。


阅读 446

收藏
2020-05-01

共1个答案

小编典典

这并不一定是详尽无遗的。

传播语法

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

优点:

  • 如果编写代码以在没有本机支持的环境中执行,则可以只编译此语法(与使用polyfill相对)。(例如,使用Babel。)

  • 不太冗长。

缺点:

  • 最初编写此答案时,这只是一个建议,而不是标准化的。使用建议时,请考虑一下如果现在使用它编写代码会做什么,并且在朝着标准化的方向发展时,它不会变得标准化或更改。此后已在ES2018中标准化。

  • 从字面上看,不是动态的。


Object.assign()

options = Object.assign({}, optionsDefault, options);

优点:

  • 标准化。

  • 动态。例:

    var sources = [{a: "A"}, {b: "B"}, {c: "C"}];
    

    options = Object.assign.apply(Object, [{}].concat(sources));
    // or
    options = Object.assign({}, …sources);

缺点:

  • 更详细。
  • 如果创作代码以在没有本机支持的环境中执行,则需要polyfill。

这就是让我感到奇怪的承诺。

这与您的要求没有直接关系。该代码未使用Object.assign(),它正在使用object-assign执行相同操作的用户代码()。他们似乎正在使用Babel编译该代码(并将其与Webpack捆绑在一起),这就是我所说的:您可以编译的语法。他们显然更喜欢将其包含object-assign在其构建中作为依赖项。

2020-05-01