JSFiddle - React, Tailwind, and code Playground
JavaScript
console.log('\uD800\uDC00'.charCodeAt(0)); //55296
console.log('\uD800\uDC00'.charCodeAt(1)); //56320
console.log('\uD800\uDC00'.codePointAt(0)); //65536 获取的是整个 surrogate pair 的码点
console.log('\uD800\uDC00'.codePointAt(1)); //56320 获取的是'\uDC00'的码点, 同charCodeAt()
console.log('\uD800'.codePointAt(0)); //55296 获取的是'\uD800'的码点, 同charCodeAt()
//根据阮一峰老师的文章:"当我们遇到两个字节,发现它的码点在U+D800到U+DBFF之间,就可以断定,紧跟在后面的两个字节的码点,应该在U+DC00到U+DFFF之间,这四个字节必须放在一起解读。"
//所以,'\uD800\uDC00'应该两个码点一起解读,解读的结果就是65536
console.log('𠮷'.length); //2
console.log('𠮷'.codePointAt(0)); //134071
console.log('𠮷'.codePointAt(1)); //57271
//𠮷(ji)这个字,是由两个码点,四个字节组成的,所以它的length是2.两个码点一起解读,得到的结果就是134071
//最后一点,当获取这类需要两个码点一起解读组成一个字符的时候,如果获取高位的code point,它得到的会是整个字符的Unicode值,但如果获取低位的code point,它得到的依然是第二个码点的Unicode值.