Map.prototype[Symbol.iterator]()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Phương thức [Symbol.iterator]() của các instance Map triển khai giao thức iterable và cho phép các đối tượng Map được sử dụng bởi hầu hết các cú pháp mong đợi iterable, chẳng hạn như cú pháp spread và vòng lặp for...of. Nó trả về một đối tượng map iterator cung cấp các cặp key-value của map theo thứ tự chèn.
Giá trị ban đầu của thuộc tính này là cùng đối tượng hàm với giá trị ban đầu của thuộc tính Map.prototype.entries.
Try it
const map = new Map();
map.set("0", "foo");
map.set(1, "bar");
const iterator = map[Symbol.iterator]();
for (const item of iterator) {
console.log(item);
}
// Expected output: Array ["0", "foo"]
// Expected output: Array [1, "bar"]
Cú pháp
map[Symbol.iterator]()
Tham số
Không có.
Giá trị trả về
Giá trị trả về giống như Map.prototype.entries(): một đối tượng iterator có thể lặp mới cung cấp các cặp key-value của map.
Ví dụ
>Duyệt bằng vòng lặp for...of
Lưu ý rằng bạn hiếm khi cần gọi phương thức này trực tiếp. Sự tồn tại của phương thức [Symbol.iterator]() làm cho các đối tượng Map trở thành iterable, và các cú pháp duyệt như vòng lặp for...of tự động gọi phương thức này để lấy iterator để duyệt.
const myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
for (const entry of myMap) {
console.log(entry);
}
// ["0", "foo"]
// [1, "bar"]
// [{}, "baz"]
for (const [key, value] of myMap) {
console.log(`${key}: ${value}`);
}
// 0: foo
// 1: bar
// [Object]: baz
Gọi iterator thủ công
Bạn vẫn có thể gọi thủ công phương thức next() của đối tượng iterator được trả về để đạt được tối đa quyền kiểm soát quá trình duyệt.
const myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
const mapIter = myMap[Symbol.iterator]();
console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]
Đặc tả kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-map.prototype-%symbol.iterator%> |