String.prototype.charAt()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
String ç charAt() æ¹æ³è¿åä¸ä¸ªç±ç»å®ç´¢å¼å¤çå个 UTF-16 ç å
ææçæ°å符串ã
charAt() æ¹æ³æ»æ¯å°å符串ä½ä¸º UTF-16 ç å
åºåè¿è¡ç´¢å¼ï¼å æ¤å®å¯è½ä¼è¿åå¤é¡¹ä»£çãè¦è·åç»å®ç´¢å¼å¤ç宿´ Unicode ç ä½ï¼è¯·ä½¿ç¨ String.prototype.codePointAt() å String.fromCodePoint()ã
å°è¯ä¸ä¸
const sentence = "The quick brown fox jumps over the lazy dog.";
const index = 4;
console.log(`The character at index ${index} is ${sentence.charAt(index)}`);
// Expected output: "The character at index 4 is q"
è¯æ³
charAt(index)
åæ°
index-
è¦è¿åçå符çç´¢å¼ï¼ä»é¶å¼å§ãä¼è¢«è½¬æ¢ä¸ºæ´æ°ââ
undefinedä¼è¢«è½¬æ¢ä¸º 0ã
è¿åå¼
è¿åä¸ä¸ªå符串ï¼è¯¥å符串表示æå® index å¤çåç¬¦ï¼æ°å¥½æ¯ä¸ä¸ª UTF-16 ç å
ï¼ã妿 index è¶
åºäº 0 â str.length - 1 çèå´ï¼charAt() å°è¿åä¸ä¸ªç©ºå符串ã
æè¿°
å符串ä¸çå符ä»å·¦å°å³è¿è¡ç´¢å¼ã第ä¸ä¸ªå符çç´¢å¼ä¸º 0ï¼åç¬¦ä¸²ä¸æåä¸ä¸ªå符çç´¢å¼ä¸º str.length - 1ã
Unicode ç ä½çèå´ä» 0 å° 1114111 (0x10FFFF)ãcharAt() æ¹æ³æ»æ¯è¿åä¸ä¸ªå
¶å¼å°äº 65536 çå符ï¼å 为æ´é«çç 使¯ç±ä¸å¯¹ 16 ä½ä»£ç伪å符表示çãå æ¤ï¼ä¸ºäºè·åå¼å¤§äº 65535 ç宿´å符ï¼éè¦æ£ç´¢ä¸ä»
æ¯ charAt(i)ï¼è¿è¦æ£ç´¢ charAt(i + 1)ï¼å°±åæä½ä¸ä¸ªç±ä¸¤ä¸ªåç¬¦ç»æçåç¬¦ä¸²ä¸æ ·ï¼ï¼æè
ä½¿ç¨ codePointAt(i) å String.fromCodePoint() 代æ¿ãæå
³ Unicode çä¿¡æ¯ï¼è¯·åé
UTF-16 å符ãUnicode ç ä½ååç´ ç°ã
charAt() åä½¿ç¨æ¹æ¬å·è¡¨ç¤ºæ³è®¿é®æå®ç´¢å¼å¤çå符é常ç¸ä¼¼ãå®ä»¬ç主è¦åºå«å¨äºï¼
charAt()å°è¯å°index转æ¢ä¸ºæ´æ°ï¼èæ¹æ¬å·è¡¨ç¤ºæ³ä¸ä¼ï¼ç´æ¥ä½¿ç¨indexä½ä¸ºå±æ§åã- 妿
indexè¶ åºèå´ï¼charAt()è¿åä¸ä¸ªç©ºå符串ï¼èæ¹æ¬å·è¡¨ç¤ºæ³è¿åundefinedã
示ä¾
>ä½¿ç¨ charAt()
ä¸ä¾è¾åºå符串 "Brave new world" ä¸åä½ç½®å¤çå符ï¼
const anyString = "Brave new world";
console.log(`å¨ç´¢å¼ 0 å¤çå符为 '${anyString.charAt()}'`);
// 没ææä¾ç´¢å¼ï¼ä½¿ç¨ 0 ä½ä¸ºé»è®¤å¼
console.log(`å¨ç´¢å¼ 0 å¤çå符为 '${anyString.charAt(0)}'`);
console.log(`å¨ç´¢å¼ 1 å¤çå符为 '${anyString.charAt(1)}'`);
console.log(`å¨ç´¢å¼ 2 å¤çå符为 '${anyString.charAt(2)}'`);
console.log(`å¨ç´¢å¼ 3 å¤çå符为 '${anyString.charAt(3)}'`);
console.log(`å¨ç´¢å¼ 4 å¤çå符为 '${anyString.charAt(4)}'`);
console.log(`å¨ç´¢å¼ 999 å¤çå符为 '${anyString.charAt(999)}'`);
ä¸é¢ä»£ç çè¾åºä¸ºï¼
å¨ç´¢å¼ 0 å¤çå符为 'B' å¨ç´¢å¼ 0 å¤çå符为 'B' å¨ç´¢å¼ 1 å¤çå符为 'r' å¨ç´¢å¼ 2 å¤çå符为 'a' å¨ç´¢å¼ 3 å¤çå符为 'v' å¨ç´¢å¼ 4 å¤çå符为 'e' å¨ç´¢å¼ 999 å¤çå符为 ''
charAt() å¯è½ä¼è¿åå¤é¡¹ä»£çï¼è¿äºä»£ç项䏿¯ææç Unicode å符ã
const str = "ð ®·ð ®¾";
console.log(str.charAt(0)); // "\ud842"ï¼è¿ä¸æ¯ææç Unicode å符
console.log(str.charAt(1)); // "\udfb7"ï¼è¿ä¸æ¯ææç Unicode å符
è¦è·åç»å®ç´¢å¼å¤ç宿´ Unicode ç ä½ï¼è¯·ä½¿ç¨æ Unicode ç 使åçç´¢å¼æ¹æ³ï¼ä¾å¦ String.prototype.codePointAt() åå°å符串å±å¼ä¸º Unicode ç 使°ç»ã
const str = "ð ®·ð ®¾";
console.log(String.fromCodePoint(str.codePointAt(0))); // "ð ®·"
console.log([...str][0]); // "ð ®·"
夿³¨ï¼é¿å
ä½¿ç¨ charAt() éæ°å®ç°ä¸è¿°è§£å³æ¹æ¡ãæ£æµå¤é¡¹ä»£çåå
¶é
对å¾å¤æï¼èå
ç½® API å¯è½æ´é«æï¼å 为å®ä»¬ç´æ¥ä½¿ç¨å符串çå
é¨è¡¨ç¤ºå½¢å¼ã妿å¿
è¦ï¼è¯·å®è£
ä¸è¿° API ç polyfillã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.charat> |