Symbol.isConcatSpreadable

Добревідомий символ Symbol.isConcatSpreadable використовують, щоб налаштувати вирівнювання об'єкта до масиву його елементів при використанні методу Array.prototype.concat().

Опис

Символ @@isConcatSpreadable (Symbol.isConcatSpreadable) може бути визначений як особиста чи успадкована властивість, а його значення є булевою величиною. Він може контролювати поведінку масивів та подібних до масивів об'єктів:

  • Для масивів поведінкою за замовчуванням є розкладання (вирівнювання) елементів. Symbol.isConcatSpreadable може запобігти вирівнюванню у цих випадках.
  • Подібні до масивів об'єкти за замовчуванням не виконують розкладання чи вирівнювання. Symbol.isConcatSpreadable може виконати примусове вирівнювання у цих випадках.

Атрибути поля Symbol.isConcatSpreadable
Доступний для запису ні
Доступний для переліку ні
Доступний для налаштування ні

Приклади

Масиви

За замовчуванням Array.prototype.concat() розкладає (вирівнює) масиви:

let alpha = ['а', 'б', 'в'],
let numeric = [1, 2, 3]

let alphaNumeric = alpha.concat(numeric)

console.log(alphaNumeric)  // Результат: ['а', 'б', 'в', 1, 2, 3]

Присвоївши Symbol.isConcatSpreadable значення false, ви можете відключити цю поведінку:

let alpha = ['а', 'б', 'в'],
let numeric = [1, 2, 3]

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

console.log(alphaNumeric)  // Результат: ['а', 'б', 'в', [1, 2, 3] ]

Подібні до масивів об'єкти

Подібні до масивів об'єкти за замовчуванням не розкладаються. Symbol.isConcatSpreadable необхідно присвоїти true, щоб отримати вирівняний масив:

let x = [1, 2, 3]

let fakeArray = {
  [Symbol.isConcatSpreadable]: true,
  length: 2,
  0: 'всім',
  1: 'привіт'
}

x.concat(fakeArray)  // [1, 2, 3, "всім", "привіт"]

Заувага: Властивість length використовується, щоб контролювати кількість властивостей об'єкта, що будуть додані. У наведеному вище прикладі length:2 вказує, що треба додати дві властивості.

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

Специфікація
ECMAScript (ECMA-262)
The definition of 'Symbol.isconcatspreadable' in that specification.

Сумісність з веб-переглядачами

BCD tables only load in the browser

Див. також