ES6字符串操作
阿新 • • 發佈:2017-06-28
還要 單個字符 console dea str color 決定 () 字符串
Unicode編碼,指的是Unicode編碼字符集,所謂的編碼字符集指的是Unicode會為每一個字符分配一個唯一的數字,從而形成的一張映射表格,其中這個唯一的數字也稱之為碼點(code point) 。例如“嚴”字在Unicode中對應的碼點是U+0x4E25。
代碼單元(code unit), 是編碼字符集進入到計算機的世界才出現的概念。因為編碼字符集只是一張映射表格,它就放到哪裏,計算機中怎麽使用這張表格, 說白了,就是在計算機中怎麽表示這些唯一的數字(碼點)? 因為計算機中全是二進制,我們要用多少個字節來表示一個數字,可能是由於當時常用的字只有65535個,所以決定用16個字節來表示一個數字,這就是UTF-16的來歷,js中也是用utf-16 來表示單個字符的。
這16個字節能表示的數字(0~65535)就叫做代碼單元。 但是對於一些不常用的字符怎麽處理,就是有的字符的碼點超過了65535, 如66785, 在計算機中怎麽表示,js的做法是兩個代碼單元(兩個16字節)來表示。
Js 中有一個字符串方法,charCodeAt(), 它可以取到字符的代碼單元。
<script> let text = "??"; console.log(text.charCodeAt(0)); // 55362 console.log(text.charCodeAt(1)) // 57271 </script>
可以看到 ?? 是有兩個代碼單元組成。這就有問題了,我們明明看到的是一個字,它確有兩個代碼單元組成,ES6為了解決這個問題,新增了一個方法codePointAt(),它直接返回的是字符的碼點。
let text = "??"; console.log(text.codePointAt(0)); // 134071
有了codePointAt() 方法,肯定還要有一個相反的方法,通過碼點來返回字符,那就是fromCodePoint
console.log(String.fromCodePoint(134071)) //??
ES6字符串操作