Когда вы распространяетесь в массив , вы вызываете метод Symbol.iterator
для объекта.&&
оценивается как первое ложное значение (или последнее истинное значение, если все верно), поэтому
let arr2 = ['value2', ...(condition && arr)];
приводит к
let arr2 = ['value2', ...(false)];
Но false
не имеетSymbol.iterator
метод.
Вместо этого вы можете использовать условный оператор и распространять пустой массив, если условие ложно:
let condition = false;
let arr1 = ['value1'];
let arr2 = ['value2', ...(condition ? arr1 : [])];
console.log(arr2);
(Это работает, потому что пустой массив имеет метод Symbol.iterator
)
Распространение объекта полностью отличается: копирует собственные перечисляемые свойства из предоставленного объекта в новый объект.false
не имеет собственных перечисляемых свойств, поэтому ничего не копируется.