String.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 giá trị String triển khai iterable protocol và cho phép chuỗi được sử dụng bởi hầu hết các cú pháp kỳ vọng iterable, chẳng hạn như spread syntax và các vòng lặp for...of. Nó trả về một string iterator object cung cấp các Unicode code points của giá trị chuỗi như các chuỗi riêng lẻ.

Try it

const str = "The quick red fox jumped over the lazy dog's back.";

const iterator = str[Symbol.iterator]();
let theChar = iterator.next();

while (!theChar.done && theChar.value !== " ") {
  console.log(theChar.value);
  theChar = iterator.next();
  // Expected output: "T"
  //                  "h"
  //                  "e"
}

Cú pháp

js
string[Symbol.iterator]()

Tham số

Không có.

Giá trị trả về

Một iterable iterator object mới cung cấp các Unicode code points của giá trị chuỗi như các chuỗi riêng lẻ.

Mô tả

Chuỗi được lặp qua theo các Unicode code points. Điều này có nghĩa là các grapheme clusters sẽ bị tách, nhưng các surrogate pairs sẽ được giữ nguyên.

js
// "Backhand Index Pointing Right: Dark Skin Tone"
[..."👉🏿"]; // ['👉', '🏿']
// tách thành emoji "Backhand Index Pointing Right" cơ bản và
// emoji "Dark skin tone"

// "Family: Man, Boy"
[..."👨‍👦"]; // [ '👨', '‍', '👦' ]
// tách thành emoji "Man" và "Boy", nối bằng ZWJ

Ví dụ

Lặp qua 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 chuỗi iterable, và các cú pháp lặp như vòng lặp for...of tự động gọi phương thức này để lấy iterator để lặp qua.

js
const str = "A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A";

for (const v of str) {
  console.log(v);
}
// "A"
// "\uD835\uDC68"
// "B"
// "\uD835\uDC69"
// "C"
// "\uD835\uDC6A"

Tự điều khiển 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 kiểm soát tối đa quá trình lặp.

js
const str = "A\uD835\uDC68";

const strIter = str[Symbol.iterator]();

console.log(strIter.next().value); // "A"
console.log(strIter.next().value); // "\uD835\uDC68"

Thông số kỹ thuật

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

Khả năng tương thích trình duyệt

Xem thêm