JS 中编码相关的所有函数
全局函数
- btoa(stringToEncode)
- 将字符串中的二进制数据编码为 Base64 编码的 ASCII 字符串
- atob(encodedData)
- 对 Base64 格式数据进行解码
- encodeURI(uri)
对整个链接进行转义,除了以下字符:
1 2 3 4 5
- _ . ! ~ * ' ( ) ; / ? : @ & = + $ , # 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- decodeURI(encodedURI)
- 解码 encodeURI
- encodeURIComponent(uriComponent)
对链接中的参数进行转义(比如将参数中的
&
等字符进行转义),除了以下字符(可见该方法比 encodeURI 转义更多字符!)1 2 3
- _ . ! ~ * ' ( ) a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- decodeURIComponent(encodedURI)
String 函数
- at(index)
- 支持负数索引,而 charAt(index) 不支持负数。
- charCodeAt(index)
- 查看指定码元字符对应的编码值,仅限 BMP。
- String.fromCharCode(numN…)
- 根据字符编码创建字符,仅限 BMP。
- codePointAt(index)
- 查看指定字符对应的编码值,支持代理对(即大于 FFFF)。注意,这里的参数索引依旧是基于 UTF-16 的。所以
'😀'.codePointAt(1)
是合法的,但获取的是低位代理。
- 查看指定字符对应的编码值,支持代理对(即大于 FFFF)。注意,这里的参数索引依旧是基于 UTF-16 的。所以
- String.fromCodePoint(numN…)
- 根据字符编码创建字符,支持代理对。
- normalize()
- 返回该字符串的 Unicode 标准化形式
说明
- BMP(Basic Multilingual Plane)指的是 Unicode 编码中的基本多语言平面,包括 U+0000 到 U+FFFF 范围内的字符。注意:length 属性始终是根据 BMP 进行计算,所以
'😀'.length
的值是 2,而不是 1- 代理对(Surrogate Pair)用于表示超出 BMP 范围的字符。代理对编码是通过两个 16 位的码元组合来表示一个字符,这两个码元被称为高位代理(high surrogate)和低位代理(low surrogate)。高位代理的范围是从 U+D800 到 U+DBFF,而低位代理的范围是从 U+DC00 到 U+DFFF。
- 代码点(Code Point):指 Unicode 中的每个字符所对应的唯一数字标识。换句话说,代码点是字符在 Unicode 标准中的位置。
- Unicode 是一种字符编码标准,旨在为世界上所有的字符提供一个唯一的编号,以便计算机能够正确地处理和显示各种语言和符号。
对字符进行规范 normalize。解决的是这么一种情况:某些 Unicode 字符可以有多种编码方式。有的字符可以使用 BMP 字符表示,也可以通过一个代理对表示。也就是说这些字符的形状是一样的,但他的实际编码却不一样,那么当我们使用等号接纳比对时,程序只会根据编码判断是否相等。下面是一个案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 上面带圆圈的大写拉丁字母 Å
const a1 = String.fromCharCode(0x00C5)
// 长度单位 “埃”
const a2 = String.fromCharCode(0x212B)
// U+0041 是大写大写拉丁字母 A
// U+030A 是上面加个圆圈
// 按照这种方式,你可以自己替换 0x0041 为其他,比如 0x0042 ... 0x007A 等等
const a3 = String.fromCharCode(0x0041, 0x030A)
console.log(String.fromCharCode(0x0042, 0x030A)) // B̊
console.log(String.fromCharCode(0x007A, 0x030A)) // z̊
console.log(a1) // Å
console.log(a2) // Å
console.log(a3) // Å
console.log(a1 === a2) // false
console.log(a2 === a3) // false
const a1Normalize = a1.normalize()
const a2Normalize = a2.normalize()
const a3Normalize = a3.normalize()
console.log(a1Normalize) // Å
console.log(a2Normalize) // Å
console.log(a3Normalize) // Å
console.log(a1Normalize === a2Normalize)
console.log(a2Normalize === a3Normalize)
Number 函数
- toString(radix)
- 获取数字的指定进制。
- Number.parseInt(string, radix)
- 获取指定进制字符串的数字值。该函数等同全局函数 parseInt
本文由作者按照 CC BY 4.0 进行授权