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 указывает, что должны быть добавлены два свойства.
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Смотрите также
© 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