未定义的 Javascript ES6扩展运算符

在开发我的应用程序时,我需要向一个组件发送一个条件道具,所以我找到了一个模式来这样做,虽然这对我来说很奇怪,我不能理解它是如何工作的以及为什么工作。

如果我输入:

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

当扩展运算符在未定义的情况下被激活时,会引发一个错误,尽管当未定义的对象位于对象内部时,会返回一个空对象。

对于这种行为,我感到很惊讶,真的应该是这样吗? 我可以信赖这个吗? 这是一个好的练习吗?

72049 次浏览

This behavior is useful for doing something like optional spreading:

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

And it gets even better with optional chaining, which is in Stage 4 now (and already available in TypeScript 3.7+):

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

a thought: its too bad it doesn't also work for spreading into an array