--- title: Symbol.isConcatSpreadable slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable tags: - ECMAScript 2015 - JavaScript - Symbol - Властивість - Символ translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable ---
Добревідомий символ Symbol.isConcatSpreadable використовують, щоб налаштувати вирівнювання об'єкта до масиву його елементів при використанні методу {{jsxref("Array.prototype.concat()")}}.
Символ @@isConcatSpreadable (Symbol.isConcatSpreadable) може бути визначений як особиста чи успадкована властивість, а його значення є булевою величиною. Він може контролювати поведінку масивів та подібних до масивів об'єктів:
Symbol.isConcatSpreadable може запобігти вирівнюванню у цих випадках.Symbol.isConcatSpreadable може виконати примусове вирівнювання у цих випадках.{{js_property_attributes(0,0,0)}}
За замовчуванням {{jsxref("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 вказує, що треба додати дві властивості.
| Специфікація |
|---|
| {{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}} |
{{Compat("javascript.builtins.Symbol.isConcatSpreadable")}}