å¨ JavaScript ä¸ï¼ææ¬æ°æ®è¢«ä»¥å符串形å¼åå¨ï¼å个å符没æåç¬çç±»åã
å符串çå 鍿 ¼å¼å§ç»æ¯ UTF-16ï¼å®ä¸ä¾èµäºé¡µé¢ç¼ç ã
å¼å·ï¼Quotesï¼
让æä»¬åå¿ä¸ä¸å¼å·çç§ç±»ã
å符串å¯ä»¥å å«å¨åå¼å·ãåå¼å·æåå¼å·ä¸ï¼
let single = 'single-quoted';
let double = "double-quoted";
let backticks = `backticks`;
åå¼å·ååå¼å·åºæ¬ç¸åã使¯ï¼åå¼å·å
许æä»¬éè¿ ${â¦} å°ä»»ä½è¡¨è¾¾å¼åµå
¥å°å符串ä¸ï¼
function sum(a, b) {
return a + b;
}
alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
使ç¨åå¼å·çå¦ä¸ä¸ªä¼ç¹æ¯å®ä»¬å 许å符串跨è¡ï¼
let guestList = `Guests:
* John
* Pete
* Mary
`;
alert(guestList); // 客人æ¸
åï¼å¤è¡
çèµ·æ¥å¾èªç¶ï¼ä¸æ¯åï¼ä½æ¯åå¼å·ååå¼å·å¯ä¸è½è¿æ ·åã
妿æä»¬ä½¿ç¨åå¼å·æåå¼å·æ¥å®ç°å符串跨è¡çè¯ï¼åä¼åºç°é误ï¼
let guestList = "Guests: // Error: Unexpected token ILLEGAL
* John";
åå¼å·ååå¼å·æ¥èªè¯è¨å建çå¤èæ¶ä»£ï¼å½æ¶æ²¡æèèå°å¤è¡å符串çéè¦ãåå¼å·åºç°è¾æï¼å æ¤æ´éç¨ã
åå¼å·è¿å
许æä»¬å¨ç¬¬ä¸ä¸ªåå¼å·ä¹åæå®ä¸ä¸ªâ模ç彿°âãè¯æ³æ¯ï¼func`string`ã彿° func 被èªå¨è°ç¨ï¼æ¥æ¶å符串ååµå
¥å¼è¡¨è¾¾å¼ï¼å¹¶å¤çå®ä»¬ãä½ å¯ä»¥å¨ docs ä¸é
读æ´å¤å
³äºå®ä»¬çä¿¡æ¯ãè¿å«å âtagged templatesâãæ¤åè½å¯ä»¥æ´è½»æ¾å°å°å符串å
è£
å°èªå®ä¹æ¨¡çæå
¶ä»å½æ°ä¸ï¼ä½è¿å¾å°ä½¿ç¨ã
ç¹æ®å符
æä»¬ä»ç¶å¯ä»¥éè¿ä½¿ç¨âæ¢è¡ç¬¦ï¼newline characterï¼âï¼ä»¥æ¯æä½¿ç¨åå¼å·ååå¼å·æ¥å建跨è¡åç¬¦ä¸²ãæ¢è¡ç¬¦åä½ \nï¼ç¨æ¥è¡¨ç¤ºæ¢è¡ï¼
let guestList = "Guests:\n * John\n * Pete\n * Mary";
alert(guestList); // ä¸ä¸ªå¤è¡ç客人å表
ä¾å¦ï¼è¿ä¸¤è¡æè¿°çæ¯ä¸æ ·çï¼åªæ¯ä¹¦åæ¹å¼ä¸åï¼
let str1 = "Hello\nWorld"; // 使ç¨âæ¢è¡ç¬¦âå建ç两è¡å符串
// 使ç¨åå¼å·åæ®éçæ¢è¡å建ç两è¡å符串
let str2 = `Hello
World`;
alert(str1 == str2); // true
è¿æå ¶ä»ä¸å¸¸è§çâç¹æ®âå符ã
è¿æ¯å®æ´å表ï¼
| å符 | æè¿° |
|---|---|
\n |
æ¢è¡ |
\r |
å¨ Windows ææ¬æä»¶ä¸ï¼ä¸¤ä¸ªå符 \r\n çç»å代表ä¸ä¸ªæ¢è¡ãèå¨é Windows æä½ç³»ç»ä¸ï¼å®å°±æ¯ \nãè¿æ¯åå²åå é æçï¼å¤§å¤æ°ç Windows 软件ä¹çè§£ \nã |
\', \" |
å¼å· |
\\ |
åæçº¿ |
\t |
å¶è¡¨ç¬¦ |
\b, \f, \v |
éæ ¼ï¼æ¢é¡µï¼åç´æ ç¾ ââ 为äºå ¼å®¹æ§ï¼ç°å¨å·²ç»ä¸ä½¿ç¨äºã |
\xXX |
å
·æç»å®åå
è¿å¶ Unicode XX ç Unicode å符ï¼ä¾å¦ï¼'\x7A' å 'z' ç¸åã |
\uXXXX |
以 UTF-16 ç¼ç çåå
è¿å¶ä»£ç XXXX ç Unicode å符ï¼ä¾å¦ \u00A9 ââ æ¯çæç¬¦å· © ç Unicodeãå®å¿
é¡»æ£å¥½æ¯ 4 个åå
è¿å¶æ°åã |
\u{Xâ¦XXXXXX}ï¼1 å° 6 个åå
è¿å¶åç¬¦ï¼ |
å ·æç»å® UTF-32 ç¼ç ç Unicode 符å·ãä¸äºç½è§çå符ç¨ä¸¤ä¸ª Unicode 符å·ç¼ç ï¼å ç¨ 4 个åèãè¿æ ·æä»¬å°±å¯ä»¥æå ¥é¿ä»£ç äºã |
Unicode 示ä¾ï¼
alert( "\u00A9" ); // ©
alert( "\u{20331}" ); // 佫ï¼ç½è§çä¸å½è±¡å½¢æåï¼é¿ Unicodeï¼
alert( "\u{1F60D}" ); // ðï¼ç¬è¸ç¬¦å·ï¼å¦ä¸ä¸ªé¿ Unicodeï¼
ææçç¹æ®å符é½ä»¥åææ å符 \ å¼å§ãå®ä¹è¢«ç§°ä¸ºâ转ä¹å符âã
妿æä»¬æ³è¦å¨åç¬¦ä¸²ä¸æå ¥ä¸ä¸ªå¼å·ï¼æä»¬ä¹ä¼ä½¿ç¨å®ã
ä¾å¦ï¼
alert( 'I\'m the Walrus!' ); // I'm the Walrus!
æ£å¦ä½ æçå°çï¼æä»¬å¿
é¡»å¨å
é¨å¼å·åå ä¸åææ \'ï¼å¦åå®å°è¡¨ç¤ºåç¬¦ä¸²ç»æã
å½ç¶ï¼åªæä¸å¤é¨éåå¼å·ç¸åçå¼å·æéè¦è½¬ä¹ãå æ¤ï¼ä½ä¸ºä¸ä¸ªæ´ä¼é çè§£å³æ¹æ¡ï¼æä»¬å¯ä»¥æ¹ç¨åå¼å·æè åå¼å·ï¼
alert( `I'm the Walrus!` ); // I'm the Walrus!
注æåææ \ å¨ JavaScript ä¸ç¨äºæ£ç¡®è¯»åå符串ï¼ç¶åæ¶å¤±ãå
åä¸çå符串没æ \ãä½ ä»ä¸è¿°ç¤ºä¾ä¸ç alert å¯ä»¥æ¸
æ¥å°çå°è¿ä¸ç¹ã
使¯å¦ææä»¬éè¦å¨åç¬¦ä¸²ä¸æ¾ç¤ºä¸ä¸ªå®é
çåææ \ åºè¯¥æä¹åï¼
æä»¬å¯ä»¥è¿æ ·åï¼åªéè¦å°å
¶ä¹¦å两次 \\ï¼
alert( `The backslash: \\` ); // The backslash: \
å符串é¿åº¦
length 屿§è¡¨ç¤ºå符串é¿åº¦ï¼
alert( `My\n`.length ); // 3
注æ \n æ¯ä¸ä¸ªåç¬çâç¹æ®âåç¬¦ï¼æä»¥é¿åº¦ç¡®å®æ¯ 3ã
length æ¯ä¸ä¸ªå±æ§ææ¡å
¶ä»ç¼ç¨è¯è¨çäººï¼ææ¶ä¼é误å°è°ç¨ str.length() è䏿¯ str.lengthãè¿æ¯è¡ä¸éçã
请注æ str.length æ¯ä¸ä¸ªæ°å屿§ï¼è䏿¯å½æ°ãåé¢ä¸éè¦æ·»å æ¬å·ã
访é®å符
è¦è·åå¨ pos ä½ç½®çä¸ä¸ªå符ï¼å¯ä»¥ä½¿ç¨æ¹æ¬å· [pos] æè
è°ç¨ str.charAt(pos) æ¹æ³ã第ä¸ä¸ªå符ä»é¶ä½ç½®å¼å§ï¼
let str = `Hello`;
// 第ä¸ä¸ªå符
alert( str[0] ); // H
alert( str.charAt(0) ); // H
// æåä¸ä¸ªå符
alert( str[str.length - 1] ); // o
æ¹æ¬å·æ¯è·åå符çä¸ç§ç°ä»£åæ¹æ³ï¼è charAt æ¯åå²åå æåå¨çã
å®ä»¬ä¹é´çå¯ä¸åºå«æ¯ï¼å¦ææ²¡ææ¾å°å符ï¼[] è¿å undefinedï¼è charAt è¿åä¸ä¸ªç©ºå符串ï¼
let str = `Hello`;
alert( str[1000] ); // undefined
alert( str.charAt(1000) ); // ''ï¼ç©ºå符串ï¼
æä»¬ä¹å¯ä»¥ä½¿ç¨ for..of éåå符ï¼
for (let char of "Hello") {
alert(char); // H,e,l,l,oï¼char å为 "H"ï¼ç¶åæ¯ "e"ï¼ç¶åæ¯ "l" çï¼
}
å符串æ¯ä¸å¯åç
å¨ JavaScript ä¸ï¼å符串ä¸å¯æ´æ¹ãæ¹åå符æ¯ä¸å¯è½çã
æä»¬è¯æä¸ä¸ä¸ºä»ä¹ä¸å¯è½ï¼
let str = 'Hi';
str[0] = 'h'; // error
alert( str[0] ); // æ æ³è¿è¡
é常çè§£å³æ¹æ³æ¯å建ä¸ä¸ªæ°çå符串ï¼å¹¶å°å
¶åé
ç» str è䏿¯ä»¥åçå符串ã
ä¾å¦ï¼
let str = 'Hi';
str = 'h' + str[1]; // æ¿æ¢å符串
alert( str ); // hi
卿¥ä¸æ¥çç« èï¼æä»¬å°çå°æ´å¤ç¸å ³ç¤ºä¾ã
æ¹å大å°å
toLowerCase() å toUpperCase() æ¹æ³å¯ä»¥æ¹å大å°åï¼
alert( 'Interface'.toUpperCase() ); // INTERFACE
alert( 'Interface'.toLowerCase() ); // interface
æè æä»¬æ³è¦ä½¿ä¸ä¸ªå符åæå°åï¼
alert( 'Interface'[0].toLowerCase() ); // 'i'
æ¥æ¾åå符串
å¨åç¬¦ä¸²ä¸æ¥æ¾åå符串æå¾å¤ç§æ¹æ³ã
str.indexOf
第ä¸ä¸ªæ¹æ³æ¯ str.indexOf(substr, pos)ã
å®ä»ç»å®ä½ç½® pos å¼å§ï¼å¨ str 䏿¥æ¾ substrï¼å¦ææ²¡ææ¾å°ï¼åè¿å -1ï¼å¦åè¿åå¹é
æåçä½ç½®ã
ä¾å¦ï¼
let str = 'Widget with id';
alert( str.indexOf('Widget') ); // 0ï¼å 为 'Widget' ä¸å¼å§å°±è¢«æ¾å°
alert( str.indexOf('widget') ); // -1ï¼æ²¡ææ¾å°ï¼æ£ç´¢æ¯å¤§å°åææç
alert( str.indexOf("id") ); // 1ï¼"id" å¨ä½ç½® 1 å¤ï¼â¦â¦idget å idï¼
å¯éç第äºä¸ªåæ°å 许æä»¬ä»ä¸ä¸ªç»å®çä½ç½®å¼å§æ£ç´¢ã
ä¾å¦ï¼"id" ç¬¬ä¸æ¬¡åºç°çä½ç½®æ¯ 1ãæ¥è¯¢ä¸ä¸ä¸ªåå¨ä½ç½®æ¶ï¼æä»¬ä» 2 å¼å§æ£ç´¢ï¼
let str = 'Widget with id';
alert( str.indexOf('id', 2) ) // 12
妿æä»¬å¯¹ææåå¨ä½ç½®é½æå
´è¶£ï¼å¯ä»¥å¨ä¸ä¸ªå¾ªç¯ä¸ä½¿ç¨ indexOfãæ¯ä¸æ¬¡æ°çè°ç¨é½åçå¨ä¸ä¸å¹é
ä½ç½®ä¹åï¼
let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // è¿æ¯æä»¬è¦æ¥æ¾çç®æ
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) break;
alert( `Found at ${foundPos}` );
 pos = foundPos + 1; // ç»§ç»ä»ä¸ä¸ä¸ªä½ç½®æ¥æ¾
}
ç¸åçç®æ³å¯ä»¥ç®åï¼
let str = "As sly as a fox, as strong as an ox";
let target = "as";
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
alert( pos );
}
str.lastIndexOf(substr, pos)è¿æä¸ä¸ªç±»ä¼¼çæ¹æ³ str.lastIndexOf(substr, position)ï¼å®ä»åç¬¦ä¸²çæ«å°¾å¼å§æç´¢å°å¼å¤´ã
å®ä¼ä»¥ç¸åç顺åºååºè¿äºäºä»¶ã
å¨ if æµè¯ä¸ indexOf æä¸ç¹ä¸æ¹ä¾¿ãæä»¬ä¸è½åè¿æ ·æå®æ¾å¨ if ä¸ï¼
let str = "Widget with id";
if (str.indexOf("Widget")) {
alert("We found it"); // ä¸å·¥ä½ï¼
}
ä¸è¿°ç¤ºä¾ä¸ç alert ä¸ä¼æ¾ç¤ºï¼å 为 str.indexOf("Widget") è¿å 0ï¼æææ¯å®å¨èµ·å§ä½ç½®å°±æ¥æ¾å°äºå¹é
项ï¼ãæ¯çï¼ä½æ¯ if 认为 0 表示 falseã
å æ¤æä»¬åºè¯¥æ£æ¥ -1ï¼åè¿æ ·ï¼
let str = "Widget with id";
if (str.indexOf("Widget") != -1) {
alert("We found it"); // ç°å¨å·¥ä½äºï¼
}
æä½ï¼bitwiseï¼NOT æå·§
è¿é使ç¨çä¸ä¸ªèæå·§æ¯ bitwise NOT ~ è¿ç®ç¬¦ãå®å°æ°å转æ¢ä¸º 32-bit æ´æ°ï¼å¦æåå¨å°æ°é¨åï¼åå é¤å°æ°é¨åï¼ï¼ç¶å对å
¶äºè¿å¶è¡¨ç¤ºå½¢å¼ä¸çææä½åååã
å®é
ä¸ï¼è¿æå³çä¸ä»¶å¾ç®åçäºå¿ï¼å¯¹äº 32-bit æ´æ°ï¼~n çäº -(n+1)ã
ä¾å¦ï¼
alert( ~2 ); // -3ï¼å -(2+1) ç¸å
alert( ~1 ); // -2ï¼å -(1+1) ç¸å
alert( ~0 ); // -1ï¼å -(0+1) ç¸å
alert( ~-1 ); // 0ï¼å -(-1+1) ç¸å
æ£å¦æä»¬çå°è¿æ ·ï¼åªæå½ n == -1 æ¶ï¼~n æä¸ºé¶ï¼éç¨äºä»»ä½ 32-bit 带符å·çæ´æ° nï¼ã
å æ¤ï¼ä»
å½ indexOf çç»æä¸æ¯ -1 æ¶ï¼æ£æ¥ if ( ~str.indexOf("...") ) æä¸ºçãæ¢å¥è¯è¯´ï¼å½æå¹é
æ¶ã
人们ç¨å®æ¥ç®å indexOf æ£æ¥ï¼
let str = "Widget";
if (~str.indexOf("Widget")) {
alert( 'Found it!' ); // æ£å¸¸è¿è¡
}
é常ä¸å»ºè®®ä»¥éæ¾èæè§çæ¹å¼ä½¿ç¨è¯è¨ç¹æ§ï¼ä½è¿ç§ç¹æ®æå·§å¨æ§ä»£ç ä¸ä»è¢«å¹¿æ³ä½¿ç¨ï¼æä»¥æä»¬åºè¯¥çè§£å®ã
åªè¦è®°ä½ï¼if (~str.indexOf(...)) è¯»ä½ âif foundâã
ç¡®åå°è¯´ï¼ç±äº ~ è¿ç®ç¬¦å°å¤§æ°åæªæä¸º 32 ä½ï¼å æ¤åå¨ç»åº 0 çå
¶ä»æ°åï¼æå°çæ°åæ¯ ~4294967295=0ãè¿ä½¿å¾è¿ç§æ£æ¥åªæå¨å符串没æé£ä¹é¿çæ
åµä¸ææ¯æ£ç¡®çã
ç°å¨æä»¬åªä¼å¨æ§ç代ç ä¸çå°è¿ä¸ªæå·§ï¼å 为ç°ä»£ JavaScript æä¾äº .includes æ¹æ³ï¼è§ä¸æï¼ã
includesï¼startsWithï¼endsWith
æ´ç°ä»£çæ¹æ³ str.includes(substr, pos) æ ¹æ® str 䏿¯å¦å
å« substr æ¥è¿å true/falseã
妿æä»¬éè¦æ£æµå¹é ï¼ä½ä¸éè¦å®çä½ç½®ï¼é£ä¹è¿æ¯æ£ç¡®çéæ©ï¼
alert( "Widget with id".includes("Widget") ); // true
alert( "Hello".includes("Bye") ); // false
str.includes ç第äºä¸ªå¯éåæ°æ¯å¼å§æç´¢çèµ·å§ä½ç½®ï¼
alert( "Widget".includes("id") ); // true
alert( "Widget".includes("id", 3) ); // false, ä»ä½ç½® 3 å¼å§æ²¡æ "id"
æ¹æ³ str.startsWith å str.endsWith çåè½ä¸å ¶åç§°æè¡¨ç¤ºçææç¸åï¼
alert( "Widget".startsWith("Wid") ); // trueï¼"Widget" 以 "Wid" å¼å§
alert( "Widget".endsWith("get") ); // trueï¼"Widget" 以 "get" ç»æ
è·ååå符串
JavaScript 䏿ä¸ç§è·ååç¬¦ä¸²çæ¹æ³ï¼substringãsubstr å sliceã
str.slice(start [, end])-
è¿åå符串ä»
startå°ï¼ä½ä¸å æ¬ï¼endçé¨åãä¾å¦ï¼
let str = "stringify"; alert( str.slice(0, 5) ); // 'strin'ï¼ä» 0 å° 5 çåå符串ï¼ä¸å æ¬ 5ï¼ alert( str.slice(0, 1) ); // 's'ï¼ä» 0 å° 1ï¼ä½ä¸å æ¬ 1ï¼æä»¥åªæå¨ 0 å¤çåç¬¦å¦ææ²¡æç¬¬äºä¸ªåæ°ï¼
sliceä¼ä¸ç´è¿è¡å°å符串æ«å°¾ï¼let str = "stringify"; alert( str.slice(2) ); // ä»ç¬¬äºä¸ªä½ç½®ç´å°ç»æstart/end乿å¯è½æ¯è´å¼ãå®ä»¬çæææ¯èµ·å§ä½ç½®ä»å符串ç»å°¾è®¡ç®ï¼let str = "stringify"; // ä»å³è¾¹ç第å个ä½ç½®å¼å§ï¼å¨å³è¾¹ç第ä¸ä¸ªä½ç½®ç»æ alert( str.slice(-4, -1) ); // 'gif' str.substring(start [, end])-
è¿åå符串ä»
startå°ï¼ä½ä¸å æ¬ï¼endçé¨åãè¿ä¸
sliceå ä¹ç¸åï¼ä½å®å 许start大äºendãä¾å¦ï¼
let str = "stringify"; // è¿äºå¯¹äº substring æ¯ç¸åç alert( str.substring(2, 6) ); // "ring" alert( str.substring(6, 2) ); // "ring" // â¦â¦ä½å¯¹ slice æ¯ä¸åçï¼ alert( str.slice(2, 6) ); // "ring"ï¼ä¸æ ·ï¼ alert( str.slice(6, 2) ); // ""ï¼ç©ºå符串ï¼ä¸æ¯æè´åæ°ï¼ä¸å sliceï¼ï¼å®ä»¬è¢«è§ä¸º
0ã str.substr(start [, length])-
è¿åå符串ä»
startå¼å§çç»å®lengthçé¨åãä¸ä»¥åçæ¹æ³ç¸æ¯ï¼è¿ä¸ªå 许æä»¬æå®
lengthè䏿¯ç»æä½ç½®ï¼let str = "stringify"; alert( str.substr(2, 4) ); // 'ring'ï¼ä»ä½ç½® 2 å¼å§ï¼è·å 4 个å符第ä¸ä¸ªåæ°å¯è½æ¯è´æ°ï¼ä»ç»å°¾ç®èµ·ï¼
let str = "stringify"; alert( str.substr(-4, 2) ); // 'gi'ï¼ä»ç¬¬ 4 ä½è·å 2 个å符
æä»¬å顾ä¸ä¸è¿äºæ¹æ³ï¼ä»¥å æ··æ·ï¼
| æ¹æ³ | éæ©æ¹å¼â¦â¦ | è´å¼åæ° |
|---|---|---|
slice(start, end) |
ä» start å° endï¼ä¸å« endï¼ |
å 许 |
substring(start, end) |
ä» start å° endï¼ä¸å« endï¼ |
è´å¼è¢«è§ä¸º 0 |
substr(start, length) |
ä» start å¼å§è·åé¿ä¸º length çå符串 |
å
许 start ä¸ºè´æ° |
å®ä»¬é½å¯ç¨äºè·åååç¬¦ä¸²ãæ£å¼ä¸ç¹æ¥è®²ï¼substr æä¸ä¸ªå°ç¼ºç¹ï¼å®ä¸æ¯å¨ JavaScript æ ¸å¿è§èä¸æè¿°çï¼èæ¯å¨éå½ B ä¸ãéå½ B çå
å®¹ä¸»è¦æ¯æè¿°å åå²åå èéç䏿¥çä»
æµè§å¨ç¹æ§ãå æ¤ï¼ç论ä¸éæµè§å¨ç¯å¢å¯è½æ æ³æ¯æ substrï¼ä½å®é
ä¸å®å¨å«çå°æ¹ä¹é½è½ç¨ã
ç¸è¾äºå
¶ä»ä¸¤ä¸ªåä½ï¼slice ç¨å¾®çµæ´»ä¸äºï¼å®å
许以è´å¼ä½ä¸ºåæ°å¹¶ä¸åæ³æ´ç®çãå æ¤ä»
ä»
è®°ä½è¿ä¸ç§æ¹æ³ä¸ç slice 就足å¤äºã
æ¯è¾å符串
æ£å¦æä»¬ä» å¼çæ¯è¾ ä¸ç« ä¸äºè§£å°çï¼å符串æåæ¯é¡ºåºé忝è¾ã
ä¸è¿ï¼ä¹æä¸äºå¥æªçå°æ¹ã
-
å°ååæ¯æ»æ¯å¤§äºå¤§å忝ï¼
alert( 'a' > 'Z' ); // true -
带åé³ç¬¦å·ç忝åå¨âä¹±åºâçæ åµï¼
alert( 'Ãsterreich' > 'Zealand' ); // true妿æä»¬å¯¹è¿äºå½å®¶åè¿è¡æåºï¼å¯è½ä¼å¯¼è´å¥æªçç»æãé常ï¼äººä»¬ä¼ææ
Zealandå¨ååä¸çÃsterreichä¹ååºç°ã
ä¸ºäºæç½åçäºä»ä¹ï¼æä»¬å顾ä¸ä¸å¨ JavaScript ä¸å符串çå é¨è¡¨ç¤ºã
ææçå符串é½ä½¿ç¨ UTF-16 ç¼ç ãå³ï¼æ¯ä¸ªåç¬¦é½æå¯¹åºçæ°å代ç ãæç¹æ®çæ¹æ³å¯ä»¥è·å代ç 表示çå符ï¼ä»¥åå符对åºç代ç ã
str.codePointAt(pos)-
è¿åå¨
posä½ç½®çå符代ç :// ä¸åç忝æä¸åç代ç alert( "z".codePointAt(0) ); // 122 alert( "Z".codePointAt(0) ); // 90 String.fromCodePoint(code)-
éè¿æ°å
codeå建å符alert( String.fromCodePoint(90) ); // Zæä»¬è¿å¯ä»¥ç¨
\uåè·åå è¿å¶ä»£ç ï¼éè¿è¿äºä»£ç æ·»å Unicode å符ï¼// å¨åå è¿å¶ç³»ç»ä¸ 90 为 5a alert( '\u005a' ); // Z
ç°å¨æä»¬çä¸ä¸ä»£ç 为 65..220 çåç¬¦ï¼æä¸åæ¯åä¸äºé¢å¤çå符ï¼ï¼æ¹æ³æ¯å建ä¸ä¸ªå符串ï¼
let str = '';
for (let i = 65; i <= 220; i++) {
str += String.fromCodePoint(i);
}
alert( str );
// ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÂÂÂÂ
// ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
çå°æ²¡ï¼å
æ¯å¤§åå符ï¼ç¶åæ¯ä¸äºç¹æ®å符ï¼ç¶åæ¯å°åå符ï¼è à å 乿¯æåè¾åºã
ç°å¨å¾ææ¾ä¸ºä»ä¹ a > Zã
å符éè¿æ°å代ç è¿è¡æ¯è¾ãè¶å¤§çä»£ç æå³çå符è¶å¤§ãaï¼97ï¼ç代ç å¤§äº Zï¼90ï¼ç代ç ã
- ææå°ååæ¯è¿½éå¨å¤§å忝ä¹åï¼å 为å®ä»¬çä»£ç æ´å¤§ã
- ä¸äºå
Ãç忝ä¸ä¸»è¦åæ¯è¡¨ä¸åãè¿éï¼å®çä»£ç æ¯ä»»ä½ä»aå°zç代ç é½è¦å¤§ã
æ£ç¡®çæ¯è¾
æ§è¡å符串æ¯è¾çâæ£ç¡®âç®æ³æ¯çèµ·æ¥æ´å¤æï¼å 为ä¸åè¯è¨ç忝é½ä¸ç¸åã
å æ¤æµè§å¨éè¦ç¥éè¦æ¯è¾çè¯è¨ã
幸è¿çæ¯ï¼ææç°ä»£æµè§å¨ï¼IE10- éè¦é¢å¤çåº Intl.JS) 齿¯æå½é åæ å ECMA-402ã
宿ä¾äºä¸ç§ç¹æ®çæ¹æ³æ¥æ¯è¾ä¸åè¯è¨çå符串ï¼éµå¾ªå®ä»¬çè§åã
è°ç¨ str.localeCompare(str2) 伿 ¹æ®è¯è¨è§åè¿åä¸ä¸ªæ´æ°ï¼è¿ä¸ªæ´æ°è½æç¤ºå符串 str 卿åºé¡ºåºä¸æå¨å符串 str2 åé¢ãåé¢ãè¿æ¯ç¸åï¼
- 妿
stræå¨str2åé¢ï¼åè¿åè´æ°ã - 妿
stræå¨str2åé¢ï¼åè¿åæ£æ°ã - 妿å®ä»¬å¨ç¸åä½ç½®ï¼åè¿å
0ã
ä¾å¦ï¼
alert( 'Ãsterreich'.localeCompare('Zealand') ); // -1
è¿ä¸ªæ¹æ³å®é
ä¸å¨ ææ¡£ 䏿å®äºä¸¤ä¸ªé¢å¤çåæ°ï¼è¿ä¸¤ä¸ªåæ°å
è®¸å®æå®è¯è¨ï¼é»è®¤è¯è¨ä»ç¯å¢ä¸è·åï¼å符顺åºè§è¯è¨ä¸åèä¸åï¼å¹¶è®¾ç½®è¯¸å¦åºå大å°åï¼æåºè¯¥å° "a" å "aÌ" ä½ç¸åå¤ççéå çè§åã
å é¨ï¼Unicode
è¿é¨å伿·±å ¥å符串å é¨ãå¦æä½ è®¡åå¤ç emojiãç½è§çæ°å¦æè±¡å½¢æåæå ¶ä»ç½è§ç符å·ï¼è¿äºç¥è¯ä¼å¯¹ä½ æç¨ã
å¦æä½ ä¸æç®æ¯æå®ä»¬ï¼ä½ å¯ä»¥è·³è¿è¿ä¸é¨åã
代ç对
ææå¸¸ç¨çåç¬¦é½æ¯ä¸ä¸ª 2 åèç代ç ã大夿°æ¬§æ´²è¯è¨ï¼æ°åçè³å¤§å¤æ°è±¡å½¢æåä¸ç忝齿 2 åèç表示形å¼ã
ä½ 2 åèåªå 许 65536 个ç»åï¼è¿å¯¹äºè¡¨ç¤ºæ¯ä¸ªå¯è½çç¬¦å·æ¯ä¸å¤çãæä»¥ç¨æç符å·è¢«ç§°ä¸ºâ代ç对âçä¸å¯¹ 2 åèç符å·ç¼ç ã
è¿äºç¬¦å·çé¿åº¦æ¯ 2ï¼
alert( 'ð³'.length ); // 2ï¼å¤§åæ°å¦ç¬¦å· X
alert( 'ð'.length ); // 2ï¼ç¬å表æ
alert( 'ð©·¶'.length ); // 2ï¼ç½è§çä¸å½è±¡å½¢æå
注æï¼ä»£çå¯¹å¨ JavaScript 被å建æ¶å¹¶ä¸åå¨ï¼å æ¤æ æ³è¢«ç¼ç¨è¯è¨æ£ç¡®å¤çï¼
æä»¬å®é
ä¸å¨ä¸é¢çæ¯ä¸ªå符串ä¸é½æä¸ä¸ªç¬¦å·ï¼ä½ length æ¾ç¤ºé¿åº¦ä¸º 2ã
String.fromCodePoint å str.codePointAt æ¯å ç§å¤ç代ç对çå°æ°æ¹æ³ãå®ä»¬æè¿æåºç°å¨ç¼ç¨è¯è¨ä¸ãå¨å®ä»¬ä¹åï¼åªæ String.fromCharCode å str.charCodeAtãè¿äºæ¹æ³å®é
ä¸ä¸ fromCodePoint/codePointAt ç¸åï¼ä½æ¯ä¸éç¨äºä»£ç对ã
è·å符å·å¯è½ä¼é常麻ç¦ï¼å 为代ç对被认为æ¯ä¸¤ä¸ªå符ï¼
alert( 'ð³'[0] ); // 奿ªç符å·â¦â¦
alert( 'ð³'[1] ); // â¦â¦ä»£ç对çä¸å
请注æï¼ä»£ç对çåé¨å没æä»»ä½æä¹ãå æ¤ï¼ä¸è¿°ç¤ºä¾ä¸ç alert æ¾ç¤ºçå®é 䏿¯åå¾ä¿¡æ¯ã
ææ¯è§åº¦æ¥è¯´ï¼ä»£ç坹乿¯å¯ä»¥éè¿å®ä»¬çä»£ç æ£æµå°çï¼å¦æä¸ä¸ªå符ç代ç å¨ 0xd800..0xdbff èå´å
ï¼é£ä¹å®æ¯ä»£ç对ç第ä¸é¨åãä¸ä¸ä¸ªå符ï¼ç¬¬äºé¨åï¼å¿
é¡»å¨ 0xdc00..0xdfff èå´ä¸ãè¿äºèå´æ¯æç
§æ åä¸é¨ä¸ºä»£ç对ä¿ççã
å¨ä¸è¿°ç¤ºä¾ä¸ï¼
// charCodeAt ä¸ç解代çå¯¹ï¼æä»¥å®ç»åºäºä»£ç对ç代ç
alert( 'ð³'.charCodeAt(0).toString(16) ); // d835ï¼å¨ 0xd800 å 0xdbff ä¹é´
alert( 'ð³'.charCodeAt(1).toString(16) ); // dcb3, å¨ 0xdc00 å 0xdfff ä¹é´
æ¬ç« èåé¢ç Iterable objectï¼å¯è¿ä»£å¯¹è±¡ï¼ ç« èä¸ï¼ä½ å¯ä»¥æ¾å°æ´å¤å¤ç代çå¯¹çæ¹æ³ãå¯è½æä¸é¨çåºï¼è¿é没æä»ä¹è¶³å¤å¥½ç建议äºã
åé³ç¬¦å·ä¸è§èå
å¨è®¸å¤è¯è¨ä¸ï¼é½æä¸äºç±åºæ¬åç¬¦ç»æç符å·ï¼å¨å ¶ä¸æ¹/䏿¹æä¸ä¸ªæ è®°ã
ä¾å¦ï¼åæ¯ a å¯ä»¥æ¯ Ã Ã¡Ã¢Ã¤Ã£Ã¥Ä çåºæ¬å符ãæå¸¸è§çâå¤åâåç¬¦å¨ UTF-16 表ä¸é½æèªå·±ç代ç ãä½ä¸æ¯å
¨é¨ï¼å 为å¯è½çç»å太å¤ã
ä¸ºäºæ¯æä»»æç»åï¼UTF-16 å 许æä»¬ä½¿ç¨å¤ä¸ª Unicode å符ï¼åºæ¬å符紧è·âè£ é¥°âå®çä¸ä¸ªæå¤ä¸ªâæ è®°âå符ã
ä¾å¦ï¼å¦ææä»¬ S åè·æç¹æ®ç âdot aboveâ å符ï¼ä»£ç \u0307ï¼ï¼åæ¾ç¤º SÌã
alert( 'S\u0307' ); // SÌ
妿æä»¬éè¦å¨åæ¯ä¸æ¹ï¼æä¸æ¹ï¼æ·»å é¢å¤çæ è®° ââ æ²¡é®é¢ï¼åªéè¦æ·»å å¿ è¦çæ è®°å符å³å¯ã
ä¾å¦ï¼å¦ææä»¬è¿½å ä¸ä¸ªå符 âdot belowâï¼ä»£ç \u0323ï¼ï¼é£ä¹æä»¬å°å¾å°âS ä¸é¢åä¸é¢é½æç¹âçå符ï¼SÌÌ£ã
ä¾å¦ï¼
alert( 'S\u0307\u0323' ); // SÌÌ£
è¿å¨æä¾è¯å¥½çµæ´»æ§çåæ¶ï¼ä¹åå¨ä¸ä¸ªæè¶£çé®é¢ï¼ä¸¤ä¸ªè§è§ä¸çèµ·æ¥ç¸åçå符ï¼å¯ä»¥ç¨ä¸åç Unicode ç»å表示ã
ä¾å¦ï¼
let s1 = 'S\u0307\u0323'; // SÌÌ£ï¼S + ä¸ç¹ + ä¸ç¹
let s2 = 'S\u0323\u0307'; // SÌ£Ìï¼S + ä¸ç¹ + ä¸ç¹
alert( `s1: ${s1}, s2: ${s2}` );
alert( s1 == s2 ); // falseï¼å°½ç®¡å符çèµ·æ¥ç¸åï¼?!ï¼
为äºè§£å³è¿ä¸ªé®é¢ï¼æä¸ä¸ª âUnicode è§èåâç®æ³ï¼å®å°æ¯ä¸ªå符串é½è½¬åæå个âéç¨âæ ¼å¼ã
å®ç± str.normalize() å®ç°ã
alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true
æè¶£çæ¯ï¼å¨å®é
æ
åµä¸ï¼normalize() å®é
ä¸å°ä¸ä¸ªç± 3 个åç¬¦ç»æçåºåå并为ä¸ä¸ªï¼\u1e68ï¼S æä¸¤ä¸ªç¹ï¼ã
alert( "S\u0307\u0323".normalize().length ); // 1
alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
äºå®ä¸ï¼æ
åµå¹¶éæ»æ¯å¦æ¤ï¼å ä¸ºç¬¦å· SÌÌ£ æ¯â常ç¨âçï¼æä»¥ UTF-16 å建è
æå®å
å«å¨ä¸»è¡¨ä¸å¹¶ç»å®äºå¯¹åºç代ç ã
å¦æä½ æ³äºè§£æ´å¤å ³äºè§èåè§åååä½çä¿¡æ¯ ââ å®ä»¬å¨ Unicode æ åéå½ä¸æè¯¦ç»æè¿°ï¼Unicode è§èåå½¢å¼ï¼ä½å¯¹äºå¤§å¤æ°å®é ç®çæ¥è¯´ï¼æ¬æçå 容就已ç»è¶³å¤äºã
æ»ç»
- æ 3 ç§ç±»åçå¼å·ãåå¼å·å
许å符串跨è¶å¤è¡å¹¶å¯ä»¥ä½¿ç¨
${â¦}å¨å符串ä¸åµå ¥è¡¨è¾¾å¼ã - JavaScript ä¸çå符串使ç¨çæ¯ UTF-16 ç¼ç ã
- æä»¬å¯ä»¥ä½¿ç¨å
\nè¿æ ·çç¹æ®å符æéè¿ä½¿ç¨\u...æ¥æä½å®ä»¬ç Unicode è¿è¡å符æå ¥ã - è·åå符æ¶ï¼ä½¿ç¨
[]ã - è·ååå符串ï¼ä½¿ç¨
sliceæsubstringã - å符串ç大/å°å转æ¢ï¼ä½¿ç¨ï¼
toLowerCase/toUpperCaseã - æ¥æ¾åå符串æ¶ï¼ä½¿ç¨
indexOfæincludes/startsWith/endsWithè¿è¡ç®åæ£æ¥ã - æ ¹æ®è¯è¨æ¯è¾å符串æ¶ä½¿ç¨
localeCompareï¼å¦åå°æå符代ç è¿è¡æ¯è¾ã
è¿æå ¶ä»å ç§æç¨çåç¬¦ä¸²æ¹æ³ï¼
str.trim()ââ å é¤å符串ååçç©ºæ ¼ (âtrimsâ)ãstr.repeat(n)ââ éå¤å符串n次ã- â¦â¦æ´å¤å 容ç»è请åè§ æåã
å符串è¿å ·æä½¿ç¨æ£å表达å¼è¿è¡æç´¢/æ¿æ¢çæ¹æ³ãä½è¿ä¸ªè¯é¢å¾å¤§ï¼å æ¤æä»¬å°å¨æ¬æç¨ä¸åç¬ç æ£åè¡¨è¾¾å¼ ç« èä¸è¿è¡è®¨è®ºã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼