前言
字符是我们编写程序的基础的基础。
我们前端是最常见的字符,符号,数字,英文,中文, 我们通常都是使用直接量来表示,偶尔会在正则表达等场景用到UTF-16码点的格式,问题来了,那你知道JS有几种字符表示方式吗?
答案:至少6种,以字符a
为例子:
`a` // 'a'
'a' // 'a'
'\a' // 'a'
'\141' // 'a'
'\x61' // 'a'
'\u0061' // 'a'
'\u{0061}' // 'a'
前三种都很理解, 后面这又是\
, \x
, \u
, \u{}
, 这都是什么玩意?
别急,我们一一道来。
更多前端基础进阶知识,可以 关注专栏 前端基础进阶,
特别申明: 测试代码最新版chrome上执行。
先看总结
格式 | 示例 | 码点范围 | 注意 |
---|---|---|---|
\8进制 | '\141' | 0-255 | 模板字符串中不可直接使用 |
\x两位16进制 | '\x61' | 0-255 | 必须两位 |
\u四位16进制 | '\u0061' | 0-65535 | 必须四位 |
\u{16进制} | '\u{0061}' | 0-0x10FFFF | 码点大于0xFFFF,length为2,下标访问值是高低位的值 |
编码基础知识
完全理解字符表示,还是需要一些简单的编码知识,我们一起来看看吧。
ASCII 码
ASCII 码一共定义了 128 个字符,例字母 a 是 97 (0110 0001)
。这 128 个字符只使用了 8 位二进制数中的后面 7 位,最前面的一位统一规定为 0。
ASCII 码止共定义了128个字符,其中33个字符无法显示。0010 0000
~ 0111 1110
(32-126)是可以显示的 ,基本都能使用键盘打出来, 具体参见对照表: ASCII编码对照表。
ASCII 额外扩展的版本 EASCII,这里就可以使用一个完整子节的 8 个 bit 位表示共 256 个字符,其中就又包括了一些衍生的拉丁字母。 可以参见 extended-ascii-table。
Unicode 和 码点
Unicode是字符集, 为了兼容ASCII,Unicode规定前0-127个字符是和ASCII是一样的,不一样的是128-255这一部分。
我们一起看看ASCII 128-255部分:
再看看 Unicode的 128-255部分:
其给某个字符规定对应的数值,我们经常称其为码点。我们可以通过字符串的实例方法charCodeAt
和codePointAt
获取,前者只能准确获取码点值小于0xFFFF(65535)
的码点。
'
标签:编码,UTF,字符,16,码点,toString,Unicode,趣味,揭秘
From: https://blog.csdn.net/u012397879/article/details/137060184