1. 程式人生 > >ES6字符串操作

ES6字符串操作

還要 單個字符 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字符串操作