每天一个前端知识(39):把字符串当做16位编码单元的序列

frontend

Posted by Tiny on July 3, 2017
console.log("𝄞 clef".length); // 7
console.log("G clef".length); // 6
console.log("𝄞 clef".charCodeAt(0)); // 55348 (0xd834)
console.log("𝄞 clef".charCodeAt(1)); // 56606 (0xdd1e)
console.log("𝄞 clef".charAt(0));
console.log("𝄞 clef".charAt(1));
console.log("𝄞 clef".charAt(2) === " "); // true
console.log("𝄞 clef".charAt(1) === " "); // false
console.log(/^.$/.test("𝄞")); // false
console.log(/^..$/.test("𝄞")); // true ..表示两个16位编码的字符

谨记

JavaScript字符串由16位的代码单元组成,而不是由Unicode代码点组成。

JavaScript使用两个代码单元表示2^16及其以上的Unicode代码点。这两个代码单元被称为代理对。

代理对甩开了字符串元素计数,length,charAt,charCodeAt方法以及正则表达式模式(例如.)受到了影响。

使用第三方的库编写可识别代码点的字符串操作。

每当你使用一个含有字符串操作的库时,你都要查阅该库文档,看它如何处理代码点的整个范围。

参考资料:https://lee134134134.github.io/page/8/