理解Symbol.isConcatSpreadable

先来看下代码

let initial = ["foo"];

let array = ["bar"];
console.log(array[Symbol.isConcatSpreadable]); // undefined
console.log(initial.concat(array)); // ['foo', 'bar']
array[Symbol.isConcatSpreadable] = false;
console.log(initial.concat(array)); // ['foo', Array(1)]

为什么Symbol.isConcatSpreadable的值为undefined和将它的值设置为false是不一样的呢?

在我的理解看来 undefined false 在做判断时应该走同一个逻辑。 但是在这里不是这样理解的,undefined 表示没有显式指定Symbol.isConcatSpreadable的值,所以这里数组的 concat 方法默认会打平数组元素。

那如果显式的设置了Symbol.isConcatSpreadable的值,结果就不一样了。所以值为 false 时表示不打平数组。