ES6 为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被for...of循环遍历。
(function (log, S) {
for (let codePoint of 'foo') {
log(codePoint)
}
// "f"
// "o"
// "o"
})(console.log, String)
除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。
(function (log, S) {
const text = String.fromCodePoint(0x20BB7);
for (let i = 0; i < text.length; i++) {
log(text[i]);
}
// �
// �
for (let i of text) {
log(i);
}
// "𠮷"
})(console.log, String)
上面代码中,字符串text只有一个字符,但是for循环会认为它包含两个字符(都不可打印),而for...of循环会正确识别出这一个字符。