【发布时间】:2021-11-18 06:15:45
【问题描述】:
当我尝试使用扩展运算符有条件地合并两个对象时,它在条件为 true 或 false 时有效:
let condition = false;
let obj1 = { key1: 'value1'}
let obj2 = {
key2: 'value2',
...(condition && obj1),
};
// obj2 = {key2: 'value2'};
当我尝试对数组使用相同的逻辑时,它仅在条件为true 时才有效:
let condition = true;
let arr1 = ['value1'];
let arr2 = ['value2', ...(condition && arr1)];
// arr2 = ['value2', 'value1']
如果条件为false,则抛出错误:
let condition = false;
let arr1 = ['value1'];
let arr2 = ['value2', ...(condition && arr1)];
// Error
为什么Array 和Object 的行为不同?
【问题讨论】:
-
未清除。你想在这里实现什么?你能把你的
(condition && arr)也贴上吗? -
仅供参考,
{ ...null }和{ ...undefined }也不会抛出错误。所以,如果我们不确定一个对象是否有价值,我们也可以放弃这个检查 -
FWIW 如果你想传播布尔值,你可以做类似
Boolean.prototype[Symbol.iterator] = function* () {}的事情(显然不要在生产代码中这样做,它只是一个古董) -
是你真正想要达到的目标
condition ? [...arr1, ...arr2] : arr1还是只是关于语言如何工作的问题? -
@JollyJoker 这只是关于语言如何工作的问题。谢谢