假设我有一个 options
变量,我想设置一些默认值。
这两种选择的优点/缺点是什么?
使用对象传播
options = {...optionsDefault, ...options};
或使用 Object.assign
options = Object.assign({}, optionsDefault, options);
这是让我想知道的 提交。
原文由 Olivier Tassinari 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有一个 options
变量,我想设置一些默认值。
这两种选择的优点/缺点是什么?
使用对象传播
options = {...optionsDefault, ...options};
或使用 Object.assign
options = Object.assign({}, optionsDefault, options);
这是让我想知道的 提交。
原文由 Olivier Tassinari 发布,翻译遵循 CC BY-SA 4.0 许可协议
这不一定是详尽无遗的。
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);
这是让我想知道的承诺。
这与您的要求没有直接关系。该代码没有使用 Object.assign()
,它使用的是执行相同操作的用户代码( object-assign
)。他们似乎正在使用 Babel 编译该代码(并将其与 Webpack 捆绑在一起),这就是我所说的:您可以编译的语法。他们显然更愿意将 object-assign
作为一个依赖项包含在他们的构建中。
原文由 JMM 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
这不一定是详尽的。
传播语法
优点:
如果在没有本机支持的环境中编写代码以执行,您可以只编译此语法(而不是使用 polyfill)。 (以 Babel 为例。)
不那么冗长。
缺点:
最初编写此答案时,这是一个 提案,未标准化。在使用提案时,请考虑如果您现在使用它编写代码并且它没有标准化或随着它走向标准化而发生变化,您会做什么。此后,这已在 ES2018 中标准化。
字面意思,不是动态的。
Object.assign()
优点:
标准化。
动态的。例子:
缺点:
更冗长。
如果在没有本机支持的环境中编写代码以执行,则需要 polyfill。
这与您要问的内容没有直接关系。该代码没有使用
Object.assign()
,而是使用了执行相同操作的用户代码(object-assign
)。他们似乎正在使用 Babel 编译该代码(并将其与 Webpack 捆绑),这就是我所说的:您可以编译的语法。他们显然更愿意将object-assign
作为依赖项包含在他们的构建中。