js底層採用的是utf-16的編碼方式,平時我們可能對utf-8更熟悉一些,他們的區別在於utf-16是採用16位,用兩位元組來表示乙個字元(unicode碼點在\u0000~\uffff之間的字元),而utf-8是8位,會根據情況來用乙個位元組、兩個位元組,最多不超過三個位元組來表示乙個字元。
因為utf-16是用兩個位元組表示,所以大於兩個位元組的字元,用es5的方法就會出錯,例如
這個字需要四個位元組來儲存,js把它識別為兩個字元,es5的方法沒法來正確處理它,es6為了解決類似的問題,提出了配套的新方法,codepointat代替charcodeat,at代替charat,fromcodepoint代替fromcharcode
他們的用法與原來的基本一樣
但有一點值得注意的是,es6只算是一種語法糖,並不會改變js底層utf-16編碼的本質,只是可以在處理這些問題的時候可以把這四個位元組看成乙個字,但當我們取長度,或者取某一位時,還是會以兩個位元組為乙個長度,像這樣:
取第零位時,已經正確的把這個字轉為了10進製碼點,第一位表示的是它的後兩個位元組,第二位才是它後面的a
這樣看起來不友好,我們可以配合es6的for…of方法
這樣看起來就合理一些。
東西總是要配套的,所以es6跟字串相關的方法都做了修正,解決了超過兩字元的問題,我們盡量使用es6的方法
字串相關的新方法還有很多,像includes,startswith,endswith,padstart,padend等。有興趣的點這裡阮一峰es6-字串的擴充套件
es6對字串的方法的擴充套件
for let i of abcd console.log abcd charat 0 console.log 吉 charat 0 判斷乙個字串是否在另外乙個字串中 var s hello world console.log s.startswith hello console.log s.end...
ES6中字串擴充套件
for.of 遍歷字串 例如 1 for let codepoint of string 執行結果 說明 三個方法都接收兩個引數,第乙個引數為檢索的值,第二個引數為檢索的起始位置,返回布林值 例如 1 let s hello world 23 const a,b,c 4 s.startswith h...
ES6中字串的擴充套件
在es5中,可以使用indexof方法和lastindexof方法查詢字串 let str hello world alert str.indexof o 4alert str.lastindexof o 7alert str.lastindexof z 1es6中,又新增了3個方法用於特定字元的查...