Javascript ES6在undefined上传播运算符

omr*_*don 25 javascript javascript-objects ecmascript-6 spread-syntax

在开发我的反应程序,我需要一个条件道具发送到一个组件,所以我在什么地方找到一个模式来做到这一点,但它似乎很奇怪,我和我无法理解如何以及为什么它的工作.

如果我输入:

console.log(...undefined)   // Error 
console.log([...undefined]) // Error
console.log({...undefined}) // Work
Run Code Online (Sandbox Code Playgroud)

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

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

bit*_*der 25

此行为对于执行可选传播等操作非常有用:

function foo(options) {
  const bar = {
    baz: 1, 
    ...(options && options.bar) //options and bar can be undefined
  } 
}
Run Code Online (Sandbox Code Playgroud)

使用可选链接可以获得更好的效果,包括stage-1:

function foo(options) {
  const bar = {
    baz: 1, 
    ...options?.bar //options and bar can be undefined
  } 
}
Run Code Online (Sandbox Code Playgroud)

一个想法:它太糟糕了它也不适用于扩散到阵列中

  • 这个怎么样 [...(选项?.bar ?? [])] (9认同)
  • 您可以像这样进行可选扩展到数组中:“[...(options?.bar ? [options.bar] : [])]”。不像物体那样优雅,但效果很好。 (6认同)
  • 是选择性传播 `...options || 的唯一解决方案 {}`? (4认同)
  • 也可以使用的数组简写是“[...(options?.bar || [])]” (4认同)