首页 > 代码库 > ES6字符串操作

ES6字符串操作

  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字符串操作