在ES6之前,js字符串一直基于16位字符编码进行构建的(UTF-16),每16位的序列是一个编码单元,代表一个字符。length,charAt()等字符串属性和方法都是基于这种编码单元构造的。Unicode引入了扩展字符集,编码规则改变了。前2^16码位以16位的编码单元表示,超过这个范围就用32位表示。所以以前的charCodeAt等方法是无法正确返回32位的UTF-16字符的码点的。在ES6之前,js字符串一直基于16位字符编码进行构建的(UTF-16),每16位的序列是一个
在ES6之前,js字符串一直基于16位字符编码进行构建的(UTF-16),每16位的序列是一个编码单元,代表一个字符。length,charAt()等字符串属性和方法都是基于这种编码单元构造的。Unicode引入了扩展字符集,编码规则改变了。前2^16码位以16位的编码单元表示,超过这个范围就用32位表示。所以以前的charCodeAt等方法是无法正确返回32位的UTF-16字符的码点的。在ES6之前,js字符串一直基于16位字符编码进行构建的(UTF-16),每16位的序列是一个