小编典典

对象传播与 Object.assign

all

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

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

使用对象传播

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

或使用 Object.assign

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

这是让我想知道的提交。


阅读 104

收藏
2022-03-11

共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。

这是让我想知道的提交。

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

2022-03-11