有人可以向我解释此es6语法吗?

时间:2018-08-24 18:54:17

标签: javascript ecmascript-6

有人可以解释以下说法吗?

  return state.map(todo =>
    (todo.id === action.id)
      ? {...todo, completed: !todo.completed}
      : todo
  )

更具体地说,这行

  

{...待办事项,已完成:!todo.completed}

为什么三元运算的真实部分有两个参数?

什么是?

  

...

2 个答案:

答案 0 :(得分:4)

...todo是传播语法,这意味着completed: !todo.completed属性将与以前的属性一起添加到现有的todo对象中。使用它,您不必手动复制现有属性。

扩展“待办事项”对象中对其进行处理。

另外(todo.id === action.id)正在检查两个对象中的id是否相同,然后添加completed: !todo.completed属性,否则将旧对象保持原样。

请查看此参考指南:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

答案 1 :(得分:2)

{
  ...todo,
  completed: !todo.completed
}

只是复制todo,但具有新的completed属性。在这种情况下,它等效于todo的completed属性的倒数。这是一个普通的JS对象。