Set.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 2015.

Phương thức [Symbol.iterator]() của các instance Set triển khai giao thức iterable và cho phép các đối tượng Set đượ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 set iterator cung cấp các value của set 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 Set.prototype.values.

Try it

const set = new Set();

set.add(42);
set.add("forty two");

const iterator = set[Symbol.iterator]();

console.log(iterator.next().value);
// Expected output: 42

console.log(iterator.next().value);
// Expected output: "forty two"

Cú pháp

js
set[Symbol.iterator]()

Tham số

Không có.

Giá trị trả về

Giá trị trả về giống như Set.prototype.values(): một đối tượng iterator có thể lặp mới cung cấp các value của set.

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 Set 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.

js
const mySet = new Set();
mySet.add("0");
mySet.add(1);
mySet.add({});

for (const v of mySet) {
  console.log(v);
}

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.

js
const mySet = new Set();
mySet.add("0");
mySet.add(1);
mySet.add({});

const setIter = mySet[Symbol.iterator]();

console.log(setIter.next().value); // "0"
console.log(setIter.next().value); // 1
console.log(setIter.next().value); // {}

Đặc tả kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# sec-set.prototype-%symbol.iterator%

Tương thích trình duyệt

Xem thêm