Spec-Zone.ru › JavaScript

Symbol.isConcatSpreadable

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.

Статическое свойство данных Symbol.isConcatSpreadable представляет собой общеизвестный символ Symbol.isConcatSpreadable. Метод Array.prototype.concat() ищет этот символ в каждом объединяемом объекте, чтобы определить, следует ли рассматривать его как массивоподобный объект и "сплющивать" до его элементов массива.

Попробуйте

const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];
let alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", 1, 2, 3]

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

console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", Array [1, 2, 3]]

Значение

Общеизвестный символ Symbol.isConcatSpreadable.

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

Описание

Свойство [Symbol.isConcatSpreadable] может быть определено как собственное или унаследованное свойство, и его значение является булевым. Оно может контролировать поведение для массивов и массивоподобных объектов:

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

Примеры

Массивы

По умолчанию, Array.prototype.concat() распространяет (сглаживает) массивы в свой результат:

const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];

const alphaNumeric = alpha.concat(numeric);

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

При установке Symbol.isConcatSpreadable в false, вы можете отключить поведение по умолчанию:

const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];

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

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

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

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

const x = [1, 2, 3];

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

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

Примечание: Свойство length используется для контроля количества добавляемых свойств объекта. В приведенном выше примере, length:2 указывает, что должны быть добавлены два свойства.

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-symbol.isconcatspreadable

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

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
isConcatSpreadable
48
15
48
35
10
48
48
35
10
5.0
48
10
1.0.0
1.0
6.0.0

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

  • Полифил Symbol.isConcatSpreadable в core-js
  • Array.prototype.concat()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API