在ES6以前,js字符串一直基於16位字符編碼進行構建的(UTF-16),每16位的序列是一個編碼單元,表明一個字符。length,charAt()等字符串屬性和方法都是基於這種編碼單元構造的。Unicode引入了擴展字符集,編碼規則改變了。前2^16碼位以16位的編碼單元表示,超過這個範圍就用32位表示。因此之前的charCodeAt等方法是沒法正確返回32位的UTF-16字符的碼點的。編碼
charCodeAt() 方法可返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。spa
一、codePointAt正確返回 32 位的 UTF-16 字符的碼點。對於那些兩個字節儲存的常規字符(前2^16碼位之前),它的返回結果與charCodeAt方法相同。(並非常規字符就在很是規字符前面)code
codePointAt方法返回的是碼點的十進制值,若是想要十六進制的值,能夠使用toString
方法轉換一下。字符串
二、String.fromCharCode()用於從碼點返回對應字符 可是隻能返回16位的字符,32位的不行。和charCodeAt相對字符編碼
String.fromCodePoint 能夠返回32位的字符 與codePointAt相對擴展