Symbol.isConcatSpreadable

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

 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 Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Symbol.isconcatspreadable' в этой спецификации.
Стандарт Initial definition.
ECMAScript Latest Draft (ECMA-262)
Определение 'Symbol.isconcatspreadable' в этой спецификации.
Черновик No change.

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

Возможность Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка 48 (Да) 48 (48) Нет Нет Нет
Возможность Android Chrome for Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка Нет Нет (Да) 48.0 (48) Нет Нет Нет

Смотри также

Метки документа и участники

 Обновлялась последний раз: Samotugo,