gpt4 book ai didi

JavaScript 展开运算符和条件运算符,为什么它不适用于数组?

转载 作者:行者123 更新时间:2023-12-02 18:08:00 26 4
gpt4 key购买 nike

这是我无法得到的。

对于对象,truefalse 都可以正常工作。表达式 (false && { teacher: 2 }) 显然是 false,传播运算符根本不会提示:

console.log({
...(true && { foo: 'bar' }),
...(false && { bar: 'baz' }),
});

结果 { foo: 'bar' }

另一方面,这不适用于数组,或者说得更好,只适用于 true 条件:

console.log([
'foo',
...(true && ['bar']),
...(false && ['baz']),
]);

TypeError: (false && ["baz"]) is not iterable

最佳答案

好的,根据docs传播运算符最初仅适用于可迭代对象(例如数组,对象不可迭代),你可以将它与对象一起使用是因为他们后来添加了此功能但实际上与对象一起使用的传播运算符是一个“包装器” "的 Object.assign

说,在你的情况下:

带对象的案例:

console.log({
...(true && { foo: 'bar' }),
...(false && { bar: 'baz' }),
});

之所以有效,是因为基本上,在“虚假”条件下它正在做:

console.log(Object.assign({}, false)) // Output: { }

数组的情况:

console.log([
'foo',
...(true && ['bar']),
...(false && ['baz']),
]);

在这种情况下不起作用,因为在 'falsy' 条件下,js 将在 false 上搜索 iterable 方法,这当然不存在,因此它引发错误

关于JavaScript 展开运算符和条件运算符,为什么它不适用于数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72881594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com