String.prototype[Symbol.iterator]()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
String å¼ç [Symbol.iterator]() æ¹æ³å®ç°äºå¯è¿ä»£åè®®ï¼å¹¶å
许å符串ä¸å¤§å¤æ°ææä¼ å
¥å¯è¿ä»£å¯¹è±¡çè¯æ³ä¸èµ·ä½¿ç¨ï¼ä¾å¦å±å¼è¯æ³å for...of 循ç¯ãå®è¿åä¸ä¸ªå符串è¿ä»£å¨å¯¹è±¡ï¼å®æ Unicode ç ä½è¿ä»£å符串å¼å¹¶ä»¥å符串çå½¢å¼è¿åã
å°è¯ä¸ä¸
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"
}
è¯æ³
string[Symbol.iterator]()
è¿åå¼
ä¸ä¸ªæ°çå¯è¿ä»£è¿ä»£å¨å¯¹è±¡ï¼å®ä»¥å符串å¼ä¸ç Unicode ç ä½çæåç¬çå符串ã
æè¿°
æ Unicode ç ä½è¿ä»£å符串ãè¿æå³çä¼å°åç´ ç°æåï¼ä½ä»£ç对å°è¢«ä¿çã
// "Backhand Index Pointing Right: Dark Skin Tone"
[..."ðð¿"]; // ['ð', 'ð¿']
// splits into the basic "Backhand Index Pointing Right" emoji and
// the "Dark skin tone" emoji
// "Family: Man, Boy"
[..."ð¨âð¦"]; // [ 'ð¨', 'â', 'ð¦' ]
// splits into the "Man" and "Boy" emoji, joined by a ZWJ
示ä¾
>ä½¿ç¨ for...of 循ç¯è¿è¡è¿ä»£
请注æï¼ä½ å¾å°éè¦ç´æ¥è°ç¨è¯¥æ¹æ³ã[Symbol.iterator]() æ¹æ³çåå¨ä½¿å¾å符串å¯è¿ä»£ï¼èå for...of 循ç¯è¿æ ·çè¿ä»£è¯æ³ä¼èªå¨è°ç¨è¯¥æ¹æ³ä»¥è·åè¿ä»£å¨è¿è¡å¾ªç¯ã
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"
æå¨è¿ä»£
ä½ ä»ç¶å¯ä»¥æå¨è°ç¨è¿åçè¿ä»£å¨å¯¹è±¡ç next() æ¹æ³ï¼ä»¥å®ç°å¯¹è¿ä»£è¿ç¨æå¤§ç¨åº¦çæ§å¶ã
const str = "A\uD835\uDC68";
const strIter = str[Symbol.iterator]();
console.log(strIter.next().value); // "A"
console.log(strIter.next().value); // "\uD835\uDC68"
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype-%symbol.iterator%> |