String.prototype.codePointAt()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
String ç codePointAt() æ¹æ³è¿åä¸ä¸ªéè´æ´æ°ï¼è¯¥æ´æ°æ¯ä»ç»å®ç´¢å¼å¼å§çå符ç Unicode ç ä½å¼ã请注æï¼ç´¢å¼ä»ç¶åºäº UTF-16 ç å
ï¼è䏿¯ Unicode ç ä½ã
å°è¯ä¸ä¸
const icons = "ââ
â²";
console.log(icons.codePointAt(1));
// Expected output: "9733"
è¯æ³
codePointAt(index)
åæ°
index-
éè¦è¿åçå符çï¼ä»é¶å¼å§çï¼ç´¢å¼ãä¼è¢«è½¬æ¢ä¸ºæ´æ°ââ
undefinedä¼è½¬æ¢ä¸º 0ã
è¿åå¼
ä¸ä¸ªéè´æ´æ°ï¼è¡¨ç¤ºç»å® index å¤å符çç ä½å¼ã
- 妿
indexè¶ åºäº0âstr.length - 1çèå´ï¼codePointAt()è¿åundefinedã - 妿
indexå¤çå ç´ æ¯ä¸ä¸ª UTF-16 å导代çï¼leading surrogateï¼ï¼åè¿å代ç对çç ä½ã - 妿
indexå¤çå ç´ æ¯ä¸ä¸ª UTF-16 å尾代çï¼trailing surrogateï¼ï¼ååªè¿åå尾代ççç å ã
æè¿°
å符串ä¸çå符ä»å·¦å°å³è¿è¡ç´¢å¼ã第ä¸ä¸ªå符çç´¢å¼ä¸º 0ï¼èå符串 str 䏿åä¸ä¸ªå符çç´¢å¼ä¸º str.length - 1ã
Unicode ç ä½èå´ä» 0 å° 1114111ï¼0x10FFFFï¼ãå¨ UTF-16 ä¸ï¼æ¯ä¸ªåç¬¦ä¸²ç´¢å¼æ¯ä¸ä¸ªåå¼èå´ä¸º 0 â 65535 çç å
ãè¾é«çç ä½ç±ä¸ä¸ªç±ä¸å¯¹ 16 ä½ä»£ç伪å符表示ãå æ¤ï¼codePointAt() è¿åçç ä½å¯è½è·¨è¶ä¸¤ä¸ªå符串索å¼ãæå
³ Unicode çä¿¡æ¯ï¼è¯·åé
UTF-16 å符ãUnicode ç ä½ååç´ ç°ã
示ä¾
>ä½¿ç¨ codePointAt()
"ABC".codePointAt(0); // 65
"ABC".codePointAt(0).toString(16); // 41
"ð".codePointAt(0); // 128525
"\ud83d\ude0d".codePointAt(0); // 128525
"\ud83d\ude0d".codePointAt(0).toString(16); // 1f60d
"ð".codePointAt(1); // 56845
"\ud83d\ude0d".codePointAt(1); // 56845
"\ud83d\ude0d".codePointAt(1).toString(16); // de0d
"ABC".codePointAt(42); // undefined
å¨å¾ªç¯ä¸ä½¿ç¨ codePointAt()
å 为使ç¨å符串索å¼è¿è¡å¾ªç¯ä¼å¯¼è´åä¸ç ä½è¢«è®¿é®ä¸¤æ¬¡ï¼ä¸æ¬¡æ¯å导代çï¼ä¸æ¬¡æ¯å尾代çï¼ï¼èç¬¬äºæ¬¡è°ç¨ codePointAt() æ¶åªè¿åå尾代çé¡¹ï¼æä»¥æå¥½é¿å
使ç¨ç´¢å¼è¿è¡å¾ªç¯ã
const str = "\ud83d\udc0e\ud83d\udc71\u2764";
for (let i = 0; i < str.length; i++) {
console.log(str.codePointAt(i).toString(16));
}
// '1f40e'ã'dc0e'ã'1f471'ã'dc71'ã'2764'
ç¸åï¼å¯ä»¥ä½¿ç¨ for...of è¯å¥æå符串å±å¼è¯æ³ï¼è¿ä¸¤ç§æ¹æ³é½ä¼è°ç¨å符串ç [Symbol.iterator]()ï¼ä»èæç
§ç ä½è¿è¡è¿ä»£ãç¶åï¼å¯ä»¥ä½¿ç¨ codePointAt(0) è·åæ¯ä¸ªå
ç´ çç ä½å¼ã
for (const codePoint of str) {
console.log(codePoint.codePointAt(0).toString(16));
}
// '1f40e'ã'1f471'ã'2764'
[...str].map((cp) => cp.codePointAt(0).toString(16));
// ['1f40e', '1f471', '2764']
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.codepointat> |