3

在减速器函数中是否使用 Spread 运算符或 Object.assign 将更改应用于目标对象,我有点困惑。

const toggleTodo = (todo) => {
  return Object.assign({}, todo, {
    completed: !todo.completed
   });
 };

然后上面提到的代码是使用 Object.assign 方法,下面的代码是使用扩展运算符

const toggleTodo = (todo) => {
return {
  ...todo,
  completed: !todo.completed
  };
};

在这两种方法中哪个是合适的方法

4

1 回答 1

9

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

这是来自Babel 的 REPL的编译代码。

var _extends = Object.assign || /* a polyfill */;

return _extends({}, todo, {
  completed: !todo.completed
});

如您所见,它只是语法糖 over Object.assign({})

没有正确的选择。

据我所知,这些是重要的区别。

  • Object.assign适用于大多数浏览器(无需编译)
  • ...for objects 没有标准化
  • ...防止您意外改变对象
  • ...将在没有它的浏览器中填充 Object.assign
  • ...需要更少的代码来表达相同的想法
于 2016-03-24T06:52:41.140 回答