更詳細的參考 大神阮一峰的文章
這里只是記下自己的一些理解
1. js的字符狀況
js采用的是UCS-2編碼[當然是unicode字符集],特點是一個字符只是兩個字節,而不像UTF-16(2,4個字節都有),但字符的規則跟UTF-16一致,如下:
基本平面的字符占用2個字節,輔助平面的字符占用4個字節,即UTF-16的編碼長度要么是2個字節(U+0000到U+FFFF),要么是4個字節(U+010000到U+10FFFF)。
其中基本字符中的 ** U+D800 到 U+DFFF ** 對應空符,即不對應任何基本字符,故這一段的編碼就用來映射輔助字符,其中** 高位用 U+D800到U+DBFF , 底位用 U+DC00 到 U+DF00 ** ,也就是字符串在識別字符串是會根據這個規則,是顯示基本字符,還是再讀取后兩位去顯示輔助字符。
高地位的公式
H = Math.floor((c-0x10000) / 0x400)+0xD800
L = (c - 0x10000) % 0x400 + 0xDC00
示例請看 阮一峰的文章的 第八條
2. es6的改進
更智能的支持的Unicode,比如遍歷字符串,可以使用
for(let s of string) {}
獲取length Array.from(strong).length
反斜杠+u+碼點
改為反斜杠+u+{+碼點+}
添加了幾個方法Array.fromCodePoint()
, Array.prototype.codePointAt
, Array.prototype.at
,正則式u
的支持,normalize
方法的支持