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

 Symbol.isConcatSpreadable - это известный символ, который используется для  определения, должен ли объект редуцироваться к сумме своих элементов при использовании метода {{jsxref("Array.prototype.concat()")}}.

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

Описание

@@isConcatSpreadable-символ (Symbol.isConcatSpreadable) можно определить как собственное или унаследованное свойство с булевым значением. Оно контролирует поведение массивов и массивоподобных объектов:

Примеры

Массивы

По умолчанию, {{jsxref("Array.prototype.concat()")}}  возвращает массив, объединяющий  элементы исходных массивов:

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

var alphaNumeric = alpha.concat(numeric);

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

Если значение Symbol.isConcatSpreadable  =  false, то можно отменить поведение по умолчанию:

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

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

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

Массивоподобные объекты

Для массивоподобных объектов поведением по умолчанию будет сохранение своей структуры. Чтобы вызвать его разложение до суммы  элементов  в итоговом массиве, нужно задать значение true для Symbol.isConcatSpreadable:

var x = [1, 2, 3];

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

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

Спецификации

Specification Status Comment
{{SpecName('ES2015', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}} {{Spec2('ES2015')}} Initial definition.
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}} {{Spec2('ESDraft')}} No change.

Совместимость с браузерами

{{CompatibilityTable}}

Возможность Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка {{CompatChrome(48)}} {{CompatVersionUnknown}} {{ CompatGeckoDesktop(48) }} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Возможность Android Chrome for Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка {{CompatNo}} {{CompatNo}} {{CompatVersionUnknown}} {{ CompatGeckoMobile(48) }} {{CompatNo}} {{CompatNo}} {{CompatNo}}

Смотрите также