Symbol.isConcatSpreadable
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
Thuộc tính dữ liệu tĩnh Symbol.isConcatSpreadable đại diện cho well-known symbol Symbol.isConcatSpreadable. Phương thức Array.prototype.concat() tra cứu symbol này trên từng đối tượng được nối để xác định xem nó có nên được coi như đối tượng dạng mảng và làm phẳng thành các phần tử mảng của nó không.
Try it
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]]
Giá trị
Well-known symbol Symbol.isConcatSpreadable.
Property attributes of Symbol.isConcatSpreadable | |
|---|---|
| Writable | no |
| Enumerable | no |
| Configurable | no |
Mô tả
Thuộc tính [Symbol.isConcatSpreadable] có thể được định nghĩa là thuộc tính riêng hoặc kế thừa và giá trị của nó là boolean. Nó có thể kiểm soát hành vi cho mảng và các đối tượng dạng mảng:
- Đối với các đối tượng mảng, hành vi mặc định là làm phẳng (spread) các phần tử.
Symbol.isConcatSpreadablecó thể tránh làm phẳng trong các trường hợp này. - Đối với các đối tượng dạng mảng, hành vi mặc định là không làm phẳng.
Symbol.isConcatSpreadablecó thể ép buộc làm phẳng trong các trường hợp này.
Ví dụ
>Mảng
Theo mặc định, Array.prototype.concat() làm phẳng mảng vào kết quả của nó:
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]
Khi đặt Symbol.isConcatSpreadable thành false, bạn có thể tắt hành vi mặc định:
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] ]
Đối tượng dạng mảng
Đối với các đối tượng dạng mảng, mặc định là không làm phẳng. Symbol.isConcatSpreadable cần được đặt thành true để có được mảng được làm phẳng:
const x = [1, 2, 3];
const fakeArray = {
[Symbol.isConcatSpreadable]: true,
length: 2,
0: "hello",
1: "world",
};
x.concat(fakeArray); // [1, 2, 3, "hello", "world"]
Note:
Thuộc tính length được dùng để kiểm soát số thuộc tính đối tượng cần thêm vào. Trong ví dụ trên, length:2 chỉ ra rằng hai thuộc tính cần được thêm vào.
Đặc tả
| Thông số kỹ thuật |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.isconcatspreadable> |