字符的Unicode表示法
1、Unicode表示法:\uxxxx(四字节UTF-16编码),xxxx表示字符的Unicode码点。范围是0000~FFFF,超出此范围使用两个双字节表示。ES6中将超出范围的码点放入大括号{}中,即可正确解读该字符。
自己的理解:\uxxxx是字符的Unicode表示法,0xxxxx,是字符的16进制Unicode码点。
codePointAt()
1、Javascript内部,字符以UTF-16的格式存储,每个字符2个字节。Unicode码点大于0xFFFF的字符,Javascript认为它们是两个字符,四个字节。
2、codePointAt可以正确返回四字节字符的编码,不过其参数不正确,修复此问题可以使用for…of循环,它可以正确识别32的UTF-16字符。
3、codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。
4、此方法定义在字符串实例上。
String.fromCodePoint()
1、用于从码点返回对应字符,可以识别32位UTF-16字符。
2、支持多个参数,将其合并为一个字符串返回。
3、此方法定义在String对象上
字符串的遍历器接口
1、ES6为字符串添加了遍历器,所以可以被for…of循环遍历。可以识别大于0xFFFF的码点。传统的for循环无法识别。
normalize()
用时再查
includes(),startsWith(),endsWidth()
1、includes():返回布尔值,表示是否找到了参数字符串
2、startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
3、endsWidth():返回布尔值,表示参数字符串是否在原字符串的尾部
三个方法都支持第二个参数,前两个方法第二个参数表示开始搜索的位置,第三个方法表示针对前n个字符。
repeat()
该方法返回一个新字符串,参数表示字符串重复几次。
padStart(),padEnd()
某字符串不够指定长度,会在头部或尾部补全。
1、padStart():用于头部补全
2、padEnd():用于尾部补全
3、两个方法接受两个参数:第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
4、用来补全的字符串和原字符串,两者的长度之和超过了最大长度,会截去超出位数的补全字符串。
5、第二个参数省略,默认使用空格补全长度。
6、padStart()两个常见用途:(1)数值补全指定位数(2)提示字符串格式
matchAll()
正则扩展章节
模板字符串
1、模板字符串使用反引号 (`) 标识
2、模板字符串可以是单行、多行
3、模板字符串中可以嵌入变量,需要将变量名写在${}之中,大括号中可以使变量、表达式、函数。
4、模板字符串中的反引号需要使用反斜杠转义
5、模板字符串可以嵌套
标签模板
1、它是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。
2、第一个参数:是一个数组,该组成员是模板字符串中没有变量替换的部分。变量替换发生在第1个成员和第2个成员之间,第2个成员和第3个成员之间,以此类推。
3、其他参数:模板字符串各个变量被替换后的值。
4、“标签模板”应用:过滤HTML字符串,防止用户恶意输入内容;多语言转换
5、标签模板接受的参数实际是一个数组,该数组有一个raw属性,保存的是转义后的原字符串。
String.raw()
1、可以作为处理模板字符串的基本方法,会将所有变量替换,对斜杠进行转义。
2、作为正常函数使用,函数实现如下:
String.raw = function (strings, ...values) {
let output = '';
let index;
for (index = 0; index < values.length; index++) {
output += strings.raw[index] + values[index];
}
output += strings.raw[index]
return output;
}
模板字符串的限制
模板字符串默认会将字符串转义,导致无法嵌入其他语言。所以在ES2018放松了只对标签模板里面的字符串转义限制。如果遇到不合法的字符串转义,不会报错,而是返回undefined,并且从raw属性上面可以得到原始字符串。