This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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 ⁨апрель 2017 г.⁩.

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

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

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