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.

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
isConcatSpreadableChrome Full support 48Edge Full support 15Firefox Full support 48IE No support NoOpera Full support 35Safari Full support 10WebView Android Full support 48Chrome Android Full support 48Firefox Android Full support 48Opera Android Full support 35Safari iOS Full support 10Samsung Internet Android Full support 5.0nodejs Full support 6.0.0

Legend

Full support  
Full support
No support  
No support

Див. також