--- title: Symbol.isConcatSpreadable slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable tags: - JavaScript - Symbol translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable ---
{{JSRef}}

内置的Symbol.isConcatSpreadable符号用于配置某对象作为{{jsxref("Array.prototype.concat()")}}方法的参数时是否展开其数组元素。

{{EmbedInteractiveExample("pages/js/symbol-isconcatspreadable.html")}}

描述

@@isConcatSpreadable 符号 (Symbol.isConcatSpreadable) 可以直接定义为对象属性或继承而来,它是布尔类型。它可以控制数组或类似数组(array-like)的对象的行为:

{{js_property_attributes(0,0,0)}}

示例

数组

默认情况下,{{jsxref("Array.prototype.concat()")}} 展开其元素连接到结果中:

var alpha = ['a', 'b', 'c'],
    numeric = [1, 2, 3];

var alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric); // 结果: ['a', 'b', 'c', 1, 2, 3]

设置Symbol.isConcatSpreadablefalse

var alpha = ['a', 'b', 'c'],
    numeric = [1, 2, 3];

numeric[Symbol.isConcatSpreadable] = false;
var alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric); // 结果: ['a', 'b', 'c', [1, 2, 3] ]

Array-like 对象

对于类数组 (array-like)对象,默认不展开。期望展开其元素用于连接,需要设置 Symbol.isConcatSpreadable 为true:

var x = [1, 2, 3];

var fakeArray = {
  [Symbol.isConcatSpreadable]: true,
  length: 2,
  0: "hello",
  1: "world"
}

x.concat(fakeArray); // [1, 2, 3, "hello", "world"]

技术标准

标准 状态 备注
{{SpecName('ES6', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}} {{Spec2('ES6')}} Initial definition.
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}} {{Spec2('ESDraft')}} No change.

浏览器兼容性

{{Compat("javascript.builtins.Symbol.isConcatSpreadable")}}

参考