# String 对象 ## æ¦è¿° `String`å¯¹è±¡æ¯ JavaScript åçæä¾çä¸ä¸ªå è£ å¯¹è±¡ä¹ä¸ï¼ç¨æ¥çæå符串对象ã ```javascript var s1 = 'abc'; var s2 = new String('abc'); typeof s1 // "string" typeof s2 // "object" s2.valueOf() // "abc" ``` ä¸é¢ä»£ç ä¸ï¼åé`s1`æ¯å符串ï¼`s2`æ¯å¯¹è±¡ãç±äº`s2`æ¯å符串对象ï¼`s2.valueOf`æ¹æ³è¿åçå°±æ¯å®æå¯¹åºçåå§å符串ã å符串对象æ¯ä¸ä¸ªç±»ä¼¼æ°ç»ç对象ï¼å¾åæ°ç»ï¼ä½ä¸æ¯æ°ç»ï¼ã ```javascript new String('abc') // String {0: "a", 1: "b", 2: "c", length: 3} (new String('abc'))[1] // "b" ``` ä¸é¢ä»£ç ä¸ï¼å符串`abc`对åºçåç¬¦ä¸²å¯¹è±¡ï¼ææ°å¼é®ï¼`0`ã`1`ã`2`ï¼å`length`屿§ï¼æä»¥å¯ä»¥åæ°ç»é£æ ·åå¼ã é¤äºç¨ä½æé 彿°ï¼`String`对象è¿å¯ä»¥å½ä½å·¥å ·æ¹æ³ä½¿ç¨ï¼å°ä»»æç±»åçå¼è½¬ä¸ºå符串ã ```javascript String(true) // "true" String(5) // "5" ``` ä¸é¢ä»£ç å°å¸å°å¼`true`åæ°å¼`5`ï¼åå«è½¬æ¢ä¸ºå符串ã ## éææ¹æ³ ### String.fromCharCode() `String`对象æä¾çéææ¹æ³ï¼å³å®ä¹å¨å¯¹è±¡æ¬èº«ï¼è䏿¯å®ä¹å¨å¯¹è±¡å®ä¾çæ¹æ³ï¼ï¼ä¸»è¦æ¯`String.fromCharCode()`ãè¯¥æ¹æ³çåæ°æ¯ä¸ä¸ªæå¤ä¸ªæ°å¼ï¼ä»£è¡¨ Unicode ç ç¹ï¼è¿å弿¯è¿äºç ç¹ç»æçå符串ã ```javascript String.fromCharCode() // "" String.fromCharCode(97) // "a" String.fromCharCode(104, 101, 108, 108, 111) // "hello" ``` ä¸é¢ä»£ç ä¸ï¼`String.fromCharCode`æ¹æ³çåæ°ä¸ºç©ºï¼å°±è¿å空å符串ï¼å¦åï¼è¿å忰坹åºç Unicode åç¬¦ä¸²ã æ³¨æï¼è¯¥æ¹æ³ä¸æ¯æ Unicode ç ç¹å¤§äº`0xFFFF`çå符ï¼å³ä¼ å ¥çåæ°ä¸è½å¤§äº`0xFFFF`ï¼å³åè¿å¶ç 65535ï¼ã ```javascript String.fromCharCode(0x20BB7) // "à®·" String.fromCharCode(0x20BB7) === String.fromCharCode(0x0BB7) // true ``` ä¸é¢ä»£ç ä¸ï¼`String.fromCharCode`åæ°`0x20BB7`大äº`0xFFFF`ï¼å¯¼è´è¿åç»æåºéã`0x20BB7`对åºçåç¬¦æ¯æ±å`ð ®·`ï¼ä½æ¯è¿åç»æå´æ¯å¦ä¸ä¸ªå符ï¼ç ç¹`0x0BB7`ï¼ãè¿æ¯å 为`String.fromCharCode`åç°åæ°å¼å¤§äº`0xFFFF`ï¼å°±ä¼å¿½ç¥å¤åºçä½ï¼å³å¿½ç¥`0x20BB7`éé¢ç`2`ï¼ã è¿ç§ç°è±¡çæ ¹æ¬åå å¨äºï¼ç ç¹å¤§äº`0xFFFF`çå符å ç¨å个åèï¼è JavaScript é»è®¤æ¯æä¸¤ä¸ªåèçå符ãè¿ç§æ åµä¸ï¼å¿ é¡»æ`0x20BB7`ææä¸¤ä¸ªå符表示ã ```javascript String.fromCharCode(0xD842, 0xDFB7) // "ð ®·" ``` ä¸é¢ä»£ç ä¸ï¼`0x20BB7`ææä¸¤ä¸ªå符`0xD842`å`0xDFB7`ï¼å³ä¸¤ä¸ªä¸¤åèå符ï¼åæä¸ä¸ªååèå符ï¼ï¼å°±è½å¾å°æ£ç¡®çç»æãç ç¹å¤§äº`0xFFFF`çå符çååè表示æ³ï¼ç± UTF-16 ç¼ç æ¹æ³å³å®ã ## å®ä¾å±æ§ ### String.prototype.length å符串å®ä¾ç`length`屿§è¿åå符串çé¿åº¦ã ```javascript 'abc'.length // 3 ``` ## å®ä¾æ¹æ³ ### String.prototype.charAt() `charAt`æ¹æ³è¿åæå®ä½ç½®çå符ï¼åæ°æ¯ä»`0`å¼å§ç¼å·çä½ç½®ã ```javascript var s = new String('abc'); s.charAt(1) // "b" s.charAt(s.length - 1) // "c" ``` è¿ä¸ªæ¹æ³å®å ¨å¯ä»¥ç¨æ°ç»ä¸æ æ¿ä»£ã ```javascript 'abc'.charAt(1) // "b" 'abc'[1] // "b" ``` å¦æåæ°ä¸ºè´æ°ï¼æå¤§äºçäºå符串çé¿åº¦ï¼`charAt`è¿å空å符串ã ```javascript 'abc'.charAt(-1) // "" 'abc'.charAt(3) // "" ``` ### String.prototype.charCodeAt() `charCodeAt()`æ¹æ³è¿åå符串æå®ä½ç½®ç Unicode ç ç¹ï¼åè¿å¶è¡¨ç¤ºï¼ï¼ç¸å½äº`String.fromCharCode()`çéæä½ã ```javascript 'abc'.charCodeAt(1) // 98 ``` ä¸é¢ä»£ç ä¸ï¼`abc`ç`1`å·ä½ç½®çå符æ¯`b`ï¼å®ç Unicode ç ç¹æ¯`98`ã å¦ææ²¡æä»»ä½åæ°ï¼`charCodeAt`è¿åé¦å符ç Unicode ç ç¹ã ```javascript 'abc'.charCodeAt() // 97 ``` å¦æåæ°ä¸ºè´æ°ï¼æå¤§äºçäºå符串çé¿åº¦ï¼`charCodeAt`è¿å`NaN`ã ```javascript 'abc'.charCodeAt(-1) // NaN 'abc'.charCodeAt(4) // NaN ``` 注æï¼`charCodeAt`æ¹æ³è¿åç Unicode ç ç¹ä¸ä¼å¤§äº65536ï¼0xFFFFï¼ï¼ä¹å°±æ¯è¯´ï¼åªè¿å两个åèçå符çç ç¹ã妿éå°ç ç¹å¤§äº 65536 çå符ï¼å个åèçå符ï¼ï¼å¿ é¡»è¿ç»ä½¿ç¨ä¸¤æ¬¡`charCodeAt`ï¼ä¸ä» è¯»å ¥`charCodeAt(i)`ï¼è¿è¦è¯»å ¥`charCodeAt(i+1)`ï¼å°ä¸¤ä¸ªå¼æ¾å¨ä¸èµ·ï¼æè½å¾å°åç¡®çå符ã ### String.prototype.concat() `concat`æ¹æ³ç¨äºè¿æ¥ä¸¤ä¸ªå符串ï¼è¿åä¸ä¸ªæ°å符串ï¼ä¸æ¹ååå符串ã ```javascript var s1 = 'abc'; var s2 = 'def'; s1.concat(s2) // "abcdef" s1 // "abc" ``` è¯¥æ¹æ³å¯ä»¥æ¥åå¤ä¸ªåæ°ã ```javascript 'a'.concat('b', 'c') // "abc" ``` 妿忰䏿¯å符串ï¼`concat`æ¹æ³ä¼å°å ¶å 转为å符串ï¼ç¶ååè¿æ¥ã ```javascript var one = 1; var two = 2; var three = '3'; ''.concat(one, two, three) // "123" one + two + three // "33" ``` ä¸é¢ä»£ç ä¸ï¼`concat`æ¹æ³å°åæ°å 转æå符串åè¿æ¥ï¼æä»¥è¿åçæ¯ä¸ä¸ªä¸ä¸ªå符çå符串ãä½ä¸ºå¯¹æ¯ï¼å å·è¿ç®ç¬¦å¨ä¸¤ä¸ªè¿ç®æ°é½æ¯æ°å¼æ¶ï¼ä¸ä¼è½¬æ¢ç±»åï¼æä»¥è¿åçæ¯ä¸ä¸ªä¸¤ä¸ªå符çå符串ã ### String.prototype.slice() `slice()`æ¹æ³ç¨äºä»åå符串ååºåå符串并è¿åï¼ä¸æ¹ååå符串ãå®ç第ä¸ä¸ªåæ°æ¯åå符串çå¼å§ä½ç½®ï¼ç¬¬äºä¸ªåæ°æ¯åå符串çç»æä½ç½®ï¼ä¸å«è¯¥ä½ç½®ï¼ã ```javascript 'JavaScript'.slice(0, 4) // "Java" ``` 妿çç¥ç¬¬äºä¸ªåæ°ï¼å表示åå符串ä¸ç´å°ååç¬¦ä¸²ç»æã ```javascript 'JavaScript'.slice(4) // "Script" ``` 妿忰æ¯è´å¼ï¼è¡¨ç¤ºä»ç»å°¾å¼å§åæ°è®¡ç®çä½ç½®ï¼å³è¯¥è´å¼å ä¸å符串é¿åº¦ã ```javascript 'JavaScript'.slice(-6) // "Script" 'JavaScript'.slice(0, -6) // "Java" 'JavaScript'.slice(-2, -1) // "p" ``` å¦æç¬¬ä¸ä¸ªåæ°å¤§äºç¬¬äºä¸ªåæ°ï¼æ£æ°æ åµä¸ï¼ï¼`slice()`æ¹æ³è¿åä¸ä¸ªç©ºå符串ã ```javascript 'JavaScript'.slice(2, 1) // "" ``` ### String.prototype.substring() `substring`æ¹æ³ç¨äºä»åå符串ååºåå符串并è¿åï¼ä¸æ¹ååå符串ï¼è·`slice`æ¹æ³å¾ç¸åãå®ç第ä¸ä¸ªåæ°è¡¨ç¤ºåå符串çå¼å§ä½ç½®ï¼ç¬¬äºä¸ªä½ç½®è¡¨ç¤ºç»æä½ç½®ï¼è¿åç»æä¸å«è¯¥ä½ç½®ï¼ã ```javascript 'JavaScript'.substring(0, 4) // "Java" ``` 妿çç¥ç¬¬äºä¸ªåæ°ï¼å表示åå符串ä¸ç´å°åå符串çç»æã ```javascript 'JavaScript'.substring(4) // "Script" ``` å¦æç¬¬ä¸ä¸ªåæ°å¤§äºç¬¬äºä¸ªåæ°ï¼`substring`æ¹æ³ä¼èªå¨æ´æ¢ä¸¤ä¸ªåæ°çä½ç½®ã ```javascript 'JavaScript'.substring(10, 4) // "Script" // çåäº 'JavaScript'.substring(4, 10) // "Script" ``` ä¸é¢ä»£ç ä¸ï¼è°æ¢`substring`æ¹æ³çä¸¤ä¸ªåæ°ï¼é½å¾å°åæ ·çç»æã 妿忰æ¯è´æ°ï¼`substring`æ¹æ³ä¼èªå¨å°è´æ°è½¬ä¸º0ã ```javascript 'JavaScript'.substring(-3) // "JavaScript" 'JavaScript'.substring(4, -3) // "Java" ``` ä¸é¢ä»£ç ä¸ï¼ç¬¬äºä¸ªä¾åçåæ°`-3`ä¼èªå¨åæ`0`ï¼çåäº`'JavaScript'.substring(4, 0)`ãç±äºç¬¬äºä¸ªåæ°å°äºç¬¬ä¸ä¸ªåæ°ï¼ä¼èªå¨äºæ¢ä½ç½®ï¼æä»¥è¿å`Java`ã ç±äºè¿äºè§åè¿åç´è§ï¼å æ¤ä¸å»ºè®®ä½¿ç¨`substring`æ¹æ³ï¼åºè¯¥ä¼å 使ç¨`slice`ã ### String.prototype.substr() `substr`æ¹æ³ç¨äºä»åå符串ååºåå符串并è¿åï¼ä¸æ¹ååå符串ï¼è·`slice`å`substring`æ¹æ³çä½ç¨ç¸åã `substr`æ¹æ³ç第ä¸ä¸ªåæ°æ¯åå符串çå¼å§ä½ç½®ï¼ä»0å¼å§è®¡ç®ï¼ï¼ç¬¬äºä¸ªåæ°æ¯åå符串çé¿åº¦ã ```javascript 'JavaScript'.substr(4, 6) // "Script" ``` 妿çç¥ç¬¬äºä¸ªåæ°ï¼å表示åå符串ä¸ç´å°åå符串çç»æã ```javascript 'JavaScript'.substr(4) // "Script" ``` å¦æç¬¬ä¸ä¸ªåæ°æ¯è´æ°ï¼è¡¨ç¤ºåæ°è®¡ç®çå符ä½ç½®ãå¦æç¬¬äºä¸ªåæ°æ¯è´æ°ï¼å°è¢«èªå¨è½¬ä¸º0ï¼å æ¤ä¼è¿å空å符串ã ```javascript 'JavaScript'.substr(-6) // "Script" 'JavaScript'.substr(4, -1) // "" ``` ä¸é¢ä»£ç ä¸ï¼ç¬¬äºä¸ªä¾åçåæ°`-1`èªå¨è½¬ä¸º`0`ï¼è¡¨ç¤ºåå符串é¿åº¦ä¸º`0`ï¼æä»¥è¿å空å符串ã ### String.prototype.indexOf()ï¼String.prototype.lastIndexOf() `indexOf`æ¹æ³ç¨äºç¡®å®ä¸ä¸ªå符串å¨å¦ä¸ä¸ªå符串ä¸ç¬¬ä¸æ¬¡åºç°çä½ç½®ï¼è¿åç»ææ¯å¹é å¼å§çä½ç½®ã妿è¿å`-1`ï¼å°±è¡¨ç¤ºä¸å¹é ã ```javascript 'hello world'.indexOf('o') // 4 'JavaScript'.indexOf('script') // -1 ``` `indexOf`æ¹æ³è¿å¯ä»¥æ¥å第äºä¸ªåæ°ï¼è¡¨ç¤ºä»è¯¥ä½ç½®å¼å§ååå¹é ã ```javascript 'hello world'.indexOf('o', 6) // 7 ``` `lastIndexOf`æ¹æ³çç¨æ³è·`indexOf`æ¹æ³ä¸è´ï¼ä¸»è¦çåºå«æ¯`lastIndexOf`ä»å°¾é¨å¼å§å¹é ï¼`indexOf`忝ä»å¤´é¨å¼å§å¹é ã ```javascript 'hello world'.lastIndexOf('o') // 7 ``` å¦å¤ï¼`lastIndexOf`ç第äºä¸ªåæ°è¡¨ç¤ºä»è¯¥ä½ç½®èµ·ååå¹é ã ```javascript 'hello world'.lastIndexOf('o', 6) // 4 ``` ### String.prototype.trim() `trim`æ¹æ³ç¨äºå»é¤å符串两端çç©ºæ ¼ï¼è¿åä¸ä¸ªæ°å符串ï¼ä¸æ¹ååå符串ã ```javascript ' hello world '.trim() // "hello world" ``` è¯¥æ¹æ³å»é¤çä¸ä» æ¯ç©ºæ ¼ï¼è¿å æ¬å¶è¡¨ç¬¦ï¼`\t`ã`\v`ï¼ãæ¢è¡ç¬¦ï¼`\n`ï¼åå车符ï¼`\r`ï¼ã ```javascript '\r\nabc \t'.trim() // 'abc' ``` ### String.prototype.toLowerCase()ï¼String.prototype.toUpperCase() `toLowerCase`æ¹æ³ç¨äºå°ä¸ä¸ªåç¬¦ä¸²å ¨é¨è½¬ä¸ºå°åï¼`toUpperCase`åæ¯å ¨é¨è½¬ä¸ºå¤§åãå®ä»¬é½è¿åä¸ä¸ªæ°å符串ï¼ä¸æ¹ååå符串ã ```javascript 'Hello World'.toLowerCase() // "hello world" 'Hello World'.toUpperCase() // "HELLO WORLD" ``` ### String.prototype.match() `match`æ¹æ³ç¨äºç¡®å®åå符串æ¯å¦å¹é æä¸ªåå符串ï¼è¿åä¸ä¸ªæ°ç»ï¼æå为å¹é ç第ä¸ä¸ªå符串ãå¦ææ²¡ææ¾å°å¹é ï¼åè¿å`null`ã ```javascript 'cat, bat, sat, fat'.match('at') // ["at"] 'cat, bat, sat, fat'.match('xt') // null ``` è¿åçæ°ç»è¿æ`index`屿§å`input`屿§ï¼åå«è¡¨ç¤ºå¹é å符串å¼å§çä½ç½®ååå§å符串ã ```javascript var matches = 'cat, bat, sat, fat'.match('at'); matches.index // 1 matches.input // "cat, bat, sat, fat" ``` `match`æ¹æ³è¿å¯ä»¥ä½¿ç¨æ£å表达å¼ä½ä¸ºåæ°ï¼è¯¦è§ãæ£å表达å¼ãä¸ç« ã ### String.prototype.search()ï¼String.prototype.replace() `search`æ¹æ³çç¨æ³åºæ¬çåäº`match`ï¼ä½æ¯è¿åå¼ä¸ºå¹é ç第ä¸ä¸ªä½ç½®ãå¦ææ²¡ææ¾å°å¹é ï¼åè¿å`-1`ã ```javascript 'cat, bat, sat, fat'.search('at') // 1 ``` `search`æ¹æ³è¿å¯ä»¥ä½¿ç¨æ£å表达å¼ä½ä¸ºåæ°ï¼è¯¦è§ãæ£å表达å¼ãä¸èã `replace`æ¹æ³ç¨äºæ¿æ¢å¹é çåå符串ï¼ä¸è¬æ åµä¸åªæ¿æ¢ç¬¬ä¸ä¸ªå¹é ï¼é¤é使ç¨å¸¦æ`g`ä¿®é¥°ç¬¦çæ£å表达å¼ï¼ã ```javascript 'aaa'.replace('a', 'b') // "baa" ``` `replace`æ¹æ³è¿å¯ä»¥ä½¿ç¨æ£å表达å¼ä½ä¸ºåæ°ï¼è¯¦è§ãæ£å表达å¼ãä¸èã ### String.prototype.split() `split`æ¹æ³æç §ç»å®è§ååå²å符串ï¼è¿åä¸ä¸ªç±åå²åºæ¥çååç¬¦ä¸²ç»æçæ°ç»ã ```javascript 'a|b|c'.split('|') // ["a", "b", "c"] ``` 妿åå²è§å为空å符串ï¼åè¿åæ°ç»çæåæ¯ååç¬¦ä¸²çæ¯ä¸ä¸ªå符ã ```javascript 'a|b|c'.split('') // ["a", "|", "b", "|", "c"] ``` 妿çç¥åæ°ï¼åè¿åæ°ç»çå¯ä¸æåå°±æ¯åå符串ã ```javascript 'a|b|c'.split() // ["a|b|c"] ``` å¦ææ»¡è¶³åå²è§åç两个é¨åç´§é»çï¼å³ä¸¤ä¸ªåå²ç¬¦ä¸é´æ²¡æå ¶ä»å符ï¼ï¼åè¿åæ°ç»ä¹ä¸ä¼æä¸ä¸ªç©ºå符串ã ```javascript 'a||c'.split('|') // ['a', '', 'c'] ``` å¦ææ»¡è¶³åå²è§åçé¨åå¤äºå符串çå¼å¤´æç»å°¾ï¼å³å®çå颿å颿²¡æå ¶ä»å符ï¼ï¼åè¿åæ°ç»ç第ä¸ä¸ªææåä¸ä¸ªæåæ¯ä¸ä¸ªç©ºå符串ã ```javascript '|b|c'.split('|') // ["", "b", "c"] 'a|b|'.split('|') // ["a", "b", ""] ``` `split`æ¹æ³è¿å¯ä»¥æ¥å第äºä¸ªåæ°ï¼éå®è¿åæ°ç»çæå¤§æåæ°ã ```javascript 'a|b|c'.split('|', 0) // [] 'a|b|c'.split('|', 1) // ["a"] 'a|b|c'.split('|', 2) // ["a", "b"] 'a|b|c'.split('|', 3) // ["a", "b", "c"] 'a|b|c'.split('|', 4) // ["a", "b", "c"] ``` ä¸é¢ä»£ç ä¸ï¼`split`æ¹æ³ç第äºä¸ªåæ°ï¼å³å®äºè¿åæ°ç»çæåæ°ã `split`æ¹æ³è¿å¯ä»¥ä½¿ç¨æ£å表达å¼ä½ä¸ºåæ°ï¼è¯¦è§ãæ£å表达å¼ãä¸èã ### String.prototype.localeCompare() `localeCompare`æ¹æ³ç¨äºæ¯è¾ä¸¤ä¸ªå符串ãå®è¿åä¸ä¸ªæ´æ°ï¼å¦æå°äº0ï¼è¡¨ç¤ºç¬¬ä¸ä¸ªå符串å°äºç¬¬äºä¸ªå符串ï¼å¦æçäº0ï¼è¡¨ç¤ºä¸¤è ç¸çï¼å¦æå¤§äº0ï¼è¡¨ç¤ºç¬¬ä¸ä¸ªå符串大äºç¬¬äºä¸ªå符串ã ```javascript 'apple'.localeCompare('banana') // -1 'apple'.localeCompare('apple') // 0 ``` è¯¥æ¹æ³çæå¤§ç¹ç¹ï¼å°±æ¯ä¼èèèªç¶è¯è¨ç顺åºã䏾便¥è¯´ï¼æ£å¸¸æ åµä¸ï¼å¤§åçè±æåæ¯å°äºå°å忝ã ```javascript 'B' > 'a' // false ``` ä¸é¢ä»£ç ä¸ï¼åæ¯`B`å°äºåæ¯`a`ãå 为 JavaScript éç¨çæ¯ Unicode ç ç¹æ¯è¾ï¼`B`çç ç¹æ¯66ï¼è`a`çç ç¹æ¯97ã 使¯ï¼`localeCompare`æ¹æ³ä¼èèèªç¶è¯è¨çæåºæ åµï¼å°`B`æå¨`a`çåé¢ã ```javascript 'B'.localeCompare('a') // 1 ``` ä¸é¢ä»£ç ä¸ï¼`localeCompare`æ¹æ³è¿åæ´æ°1ï¼è¡¨ç¤º`B`è¾å¤§ã `localeCompare`è¿å¯ä»¥æç¬¬äºä¸ªåæ°ï¼æå®æä½¿ç¨çè¯è¨ï¼é»è®¤æ¯è±è¯ï¼ï¼ç¶åæ ¹æ®è¯¥è¯è¨çè§åè¿è¡æ¯è¾ã ```javascript 'ä'.localeCompare('z', 'de') // -1 'ä'.localeCompare('z', 'sv') // 1 ``` ä¸é¢ä»£ç ä¸ï¼`de`表示德è¯ï¼`sv`表示çå ¸è¯ãå¾·è¯ä¸ï¼`ä`å°äº`z`ï¼æä»¥è¿å`-1`ï¼çå ¸è¯ä¸ï¼`ä`大äº`z`ï¼æä»¥è¿å`1`ã ## åè龿¥ - Ariya Hidayat, [JavaScript String: substring, substr, slice](http://ariya.ofilabs.com/2014/02/javascript-string-substring-substr-slice.html)