对于这个概念,可以从一个问题去延展开来,详细文章: js与字符集编码
- js 的编码方式
- 运行时:早期设计语言时用 ucs-2 ,现在是 utf16。
- 就是表示用 2 个字节代表一个字符,所以我们说长度为 1 的字符都是说它的字节有 2 个
- 什么是 utf-16
- 是一种编码方式,用 16 进制表示。
- 1 个字节有 8 位二进制,一位 16 进制转换成二进制表示有 4 位,所以 2 位 16 进制代表一个字节,一个字节的 16 进制范围是 00 ~ ff
- 那么为什么是 2 个字节表示一个字符呢?
- unicode 用 utf16 表示字符对应的码点范围为 0000 ~ 10ffff,有 0010 = 16 个平面,基本平面最多 ffff = 65535 个字符
- 也就是说一个基本平面的字符是一个 16 进制数,16 进制用 4 位来表示。
- 由上我们知道 2 位 16 进制代表一个字节,所以一个 unicode 字符有 2 个字节。
- 在 unicode 码点用 10 进制表示,我们可以先求码点,再转换成 16 进制来验证
'我'.codePointAt() // 25105 25105..toString(16) // "6211" '\u6211' // "我"
- 由于 emoji 表情不在基本平面内,由 2 位 16 进制数表示,所以是 4 个字节,长度为 2.