--- 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 ---
Symbol.isConcatSpreadable - это известный символ, который используется для определения, должен ли объект редуцироваться к сумме своих элементов при использовании метода {{jsxref("Array.prototype.concat()")}}.
@@isConcatSpreadable-символ (Symbol.isConcatSpreadable) можно определить как собственное или унаследованное свойство с булевым значением. Оно контролирует поведение массивов и массивоподобных объектов:
Symbol.isConcatSpreadable поможет избежать редукции в подобных случаях.сохранение своей структуры.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}} |