Javascript ES6在undefined上传播运算符

时间:2017-10-26 14:37:31

标签: javascript ecmascript-6 javascript-objects spread-syntax

在开发我的反应应用程序时,我需要向一个组件发送一个条件道具,所以我发现某个模式可以这样做,虽然它对我来说似乎很奇怪,我无法理解它是如何以及为什么有效。

如果我输入:

console.log(...undefined)   // Error 
console.log([...undefined]) // Error
console.log({...undefined}) // Work

当未定义时激活扩展运算符时会引发错误,但是当undefined在对象内部时,会返回一个空对象。

我对这种行为感到非常惊讶,这真的是它应该如何,我可以依靠这个并且这是一个好的做法吗?

1 个答案:

答案 0 :(得分:21)

此行为对于执行可选传播

等操作非常有用
function foo(options) {
  const bar = {
    baz: 1, 
    ...(options && options.bar) //options and bar can be undefined
  } 
}

optional chaining位于stage-1

,情况会更好
function foo(options) {
  const bar = {
    baz: 1, 
    ...options?.bar //options and bar can be undefined
  } 
}

一个想法:它太糟糕了,它也无法传播到一个数组