Symbol.isConcatSpreadable

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

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

Атрибуты свойства Symbol.isConcatSpreadable
Записываемоенет
Перечисляемоенет
Настраиваемоенет

Описание

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

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

Примеры

Массивы

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

js
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, то можно отменить поведение по умолчанию:

js
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:

js
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
ECMAScript® 2025 Language Specification
# sec-symbol.isconcatspreadable

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

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
isConcatSpreadable

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

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