执行如下代码:
const array = ['a', 'b', 'c'];
let obj = {0:1,1:2 }
console.log(array.concat(obj));
// 设置 obj 的 @@isConcatSpreadable
obj[Symbol.isConcatSpreadable] = true;
console.log(array.concat(obj));
// newObj同时存在length和@@isConcatSpreadable
let newObj = {0:1,1:2,length:2 }
newObj[Symbol.isConcatSpreadable] = true;
console.log(array.concat(newObj));
其输出为
["a", "b", "c", { 0: 1, 1: 2 }]
["a", "b", "c"]
["a", "b", "c", 1, 2]
为什么需要同时设置obj
的[Symbol.isConcatSpreadable]
和length
后才能如期望的执行concat?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…