Symbol.isConcatSpreadable
用于配置某对象作为 Array.prototype.concat()
方法的参数时是否展开其数组元素。
let s1 = ['c', 'd'][('a', 'b')].concat(s1, 'e'); // ['a', 'b', 'c', 'd', 'e']s1[Symbol.isConcatSpreadable]; // undefinedlet s2 = ['c', 'd'];s2[Symbol.isConcatSpreadable] = false[('a', 'b')].concat(s2, 'e'); // ['a', 'b', ['c', 'd'], 'e']
上面代码说明,数组的默认行为时可以展开,Symbol.isConcatSpreadable
默认等于 undefined
。该属性等于 ture
时,也有展开的效果。
类似数组的对象正好相反,默认不展开。它的 Symbol.isConcatSpreadable
属性设为 true
,才可以展开。
let obj = { length: 2, 0: 'c', 1: 'd' };['a', 'b'].concat(obj, 'e'); // ['a', 'b', obj, 'e']obj[Symbol.isConcatSpreadable] = true;['a', 'b'].concat(obj, 'e'); // ['a', 'b', 'c', 'd', 'e']