Symbol.isConcatSpreadable
Symbol.isConcatSpreadable 靜態資料屬性表示內建的 Symbol Symbol.isConcatSpreadable。當使用 Array.prototype.concat() 方法進行連線時,它會查詢要連線的每個物件上的此 Symbol,以確定該物件是否應被視為類陣列物件並展平為陣列元素。
試一試
const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];
let alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", 1, 2, 3]
numeric[Symbol.isConcatSpreadable] = false;
alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", Array [1, 2, 3]]
值
內建的 Symbol Symbol.isConcatSpreadable。
Symbol.isConcatSpreadable 的屬性特性 | |
|---|---|
| 可寫 | 否 |
| 可列舉 | 否 |
| 可配置 | 否 |
描述
[Symbol.isConcatSpreadable] 屬性可以定義為自身屬性或繼承屬性,其值為布林值。它可以控制陣列和類陣列物件的行為。
- 對於陣列物件,預設行為是展開(展平)元素。
Symbol.isConcatSpreadable可以避免在這種情況下進行展平。 - 對於類陣列物件,預設行為是不展開或展平。
Symbol.isConcatSpreadable可以強制在這種情況下進行展平。
示例
陣列
預設情況下,Array.prototype.concat() 會將陣列展開(展平)到其結果中。
js
const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];
const alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // Result: ['a', 'b', 'c', 1, 2, 3]
當將 Symbol.isConcatSpreadable 設定為 false 時,您可以停用預設行為。
js
const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];
numeric[Symbol.isConcatSpreadable] = false;
const alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // Result: ['a', 'b', 'c', [1, 2, 3] ]
類陣列物件
對於類陣列物件,預設是不展開。需要將 Symbol.isConcatSpreadable 設定為 true 才能獲得展平後的陣列。
js
const x = [1, 2, 3];
const fakeArray = {
[Symbol.isConcatSpreadable]: true,
length: 2,
0: "hello",
1: "world",
};
x.concat(fakeArray); // [1, 2, 3, "hello", "world"]
注意:length 屬性用於控制要新增的物件屬性的數量。在上面的示例中,length:2 表示必須新增兩個屬性。
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-symbol.isconcatspreadable |
瀏覽器相容性
載入中…