-
字符的Unicode表示法
ES5允许采用 \uxxxx 形式表示一个字符。xxxx表示字符的Unicode码点.
\uxxxx 表示法只限于码点在 \u0000 ~ \uFFFF 之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。
ES6 可以使用\u{xxxxx},将码点放入大括号中,可以正确解读该字符
//🧡 的 unicode U+1F9E1
/*(1)ES6*/
let a = "\u{1F9E1}"
a //"🧡"
/*(2)ES5仅支持 \uxxxx表示法,超过范围的必须用两个UTF-16码元来表示*/
let first = "\u{1F9E1}"[0].codePointAt(0).toString(16); //d83e
let second = "\u{1F9E1}"[1].codePointAt(0).toString(16); //dde1
let b = '\ud83e\udde1'
b //"🧡"
//将UTF-32字元转换为两个UTF-16的表示法
function toUTF16(codePoint) {
var TEN_BITS = parseInt('1111111111', 2);
function u(codeUnit) {
return '\\u'+codeUnit.toString(16).toUpperCase();
}
if (codePoint <= 0xFFFF) {
return u(codePoint);
}
codePoint -= 0x10000;
// Shift right to get to most significant 10 bits
var leadingSurrogate = 0xD800 | (codePoint >> 10);
// Mask to get least significant 10 bits
var trailingSurrogate = 0xDC00 | (codePoint & TEN_BITS);
return u