字符的 Unicode 表示法
采用\uxxxx形式表示一个字符(\u0000~\uFFFF)
超范围的字符,必须用两个双字节的形式表示。
“\u20BB7” // “7”
“\uD842\uDFB7” // “𠮷”
“\u{20BB7}” // “𠮷”
js六种方法表字符
- ‘\z’ === ‘z’ // true
- ‘\172’ === ‘z’ // true
- ‘\x7A’ === ‘z’ // true
- ‘\u007A’ === ‘z’ // true
- ‘\u{7A}’ === ‘z’ // true
for…of循环遍历
1 | for (let codePoint of 'foo') { |
Js 规定有5个字符,不能在字符串里面直接使用,只能使用转义形式。
- U+005C:反斜杠(reverse solidus)
- U+000D:回车(carriage return)
- U+2028:行分隔符(line separator)
- U+2029:段分隔符(paragraph separator)
- U+000A:换行符(line feed)
JSON.stringify() 的改造
- 遇到0xD800到0xDFFF之间的单个码点,或不存在的配对形式,它会返回转义字符串,留给应用自己决定下一步的处理。
- JSON.stringify(‘\u{D834}’) // “”\uD834””
- JSON.stringify(‘\uDF06\uD834’) // “”\udf06\ud834””
模板字符串(反引号`标识)
- 模板字符串中嵌入变量,需要将变量名写在${}之中。
1
`${x} + ${y} = ${x + y}`
- 能调用函数
1
`foo ${fn()} bar`
标签模板
1 | alert`hello` |
拓展
String.fromCodePoint()
- 从 Unicode 码点返回对应字符
codePointAt()
- 处理4 个字节储存的字符,返回一个字符的码点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25let s = '𠮷a'; // 0x20BB7
s.codePointAt(0) // 20 134071
s.codePointAt(1) // BB 57271
s.codePointAt(2) // 7 97
解决字符串参数位置识别不对:
1、for...of循环
let s = '𠮷a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
2、扩展运算符(...)
let arr = [...'𠮷a']; // arr.length === 2
arr.forEach(
ch => console.log(ch.codePointAt(0).toString(16))
);
// 测试是否是四个字节
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("𠮷") // true
is32Bit("a") // false
String.raw()
- 原有多少斜杠,
实际返回原来斜杠的两倍
,但肉眼看不出来 - String.raw
Hi\n${2+3}!
// 实际返回 “Hi\n5!”,显示的是转义后的结果 “Hi\n5!” - String.raw
Hi\\n
=== “Hi\\n” // true
normalize()
- 将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。
includes()
- 返回布尔值,表示是否找到了参数字符串。
startsWith()
- 返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith()
- 返回布尔值,表示参数字符串是否在原字符串的尾部。
repeat()
- 返回一个新字符串,表示将原字符串重复n次。
- ‘hello’.repeat(2) // “hellohello”
- 如果参数是小数会向上取整,负数或无穷会报错,0到-1和NaN等于0,字符串会转数字
padStart()用于头部补全长度,padEnd()用于尾部补全长度。
- 注:补全长度要大于原长度
- 两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串(省略默认空格)过了最大长度,则会截去超出位数的补全字符串。
- 补全的字符串+原字符串长度之和超
trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。返回的是新字符串
matchAll()返回一个正则表达式在当前字符串的所有匹配,以数组的形式
replaceAll(替换前,替换后)方法,全部替换。返回新字符串
- 第一个参数:字符串/带g的正则表达式
- 第二个参数:函数/字符串,可以带有特殊字符
- $&:匹配的字符串。
- $` :匹配结果前面的文本。
- $’:匹配结果后面的文本。
- $n:匹配成功的第n组内容,n是从1开始的自然数。这个参数生效的前提是,第一个参数必须是正则表达式。
- $$:指代美元符号$。
at()
- 接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。