📜  Javascript 字符串 @@iterator 方法(1)

📅  最后修改于: 2023-12-03 15:16:11.258000             🧑  作者: Mango

Javascript 字符串 @@iterator 方法

在ECMAScript 6(ES6)中,字符串成为了可迭代对象,这意味着可以对字符串使用 Iterator 接口。字符串的 @@iterator 方法是一个迭代器函数,可以将字符串分解为一个个的 UTF-16 编码单元,提供了一种新的遍历字符串的方式。

使用方法

@@iterator 方法可以使用 for...of 循环进行遍历:

const str = "hello world";
for(let p of str) {
  console.log(p);
}
// 输出如下:
// "h"
// "e"
// "l"
// "l"
// "o"
// " "
// "w"
// "o"
// "r"
// "l"
// "d"

也可以通过调用 Symbol.iterator 方法获取该方法:

const str = "hello world";
const iterator = str[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
// 输出如下:
// { value: 'h', done: false }
// { value: 'e', done: false }
注意事项
  • 返回值:迭代器对象,包含 next 方法。
  • 迭代时返回的字符:由于 Javascript 中采用 UTF-16 编码,因此某些字符会使用两个编码单元表示。例如,字符 "𠮷" 使用两个 UTF-16 编码单元表示,如果使用 @@iterator 方法遍历字符串,则会分别返回两个编码单元。
  • 非字符串:如果传入的参数不是字符串,则会抛出一个 TypeError 异常。
总结

@@iterator 方法提供了一种新的遍历字符串的方式,可以将字符串分解为一个个的 UTF-16 编码单元进行迭代,可以使用 for...of 循环或调用 Symbol.iterator 方法获取迭代器对象进行迭代。需要注意的是,某些字符会使用两个编码单元表示,如字符 "𠮷",迭代时需要特别注意。