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()
возвращает массив, объединяющий элементы исходных массивов:
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 |
---|
ECMAScript Language Specification # sec-symbol.isconcatspreadable |
Совместимость с браузерами
BCD tables only load in the browser