字符串的扩展

1.字符的 Unicode 表示法

JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。

2.codePointAt()

JavaScript内部,字符以UTF-16的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode码点大于0xFFFF的字符),JavaScript会认为它们是两个字符。

3.String.fromCodePoint()

ES6提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode方法的不足。

4.字符串的遍历器接口

ES6为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被for...of循环遍历。

5.at()

ES6字符串的“.at()”,可以识别Unicode编号大于0xFFFF的字符,返回正确的字符。

6.normalize()

许多欧洲语言有语调符号和重音符号。为了表示它们,Unicode提供了两种方法。
一种是直接提供带重音符号的字符,比如Ǒ(\u01D1)。
另一种是提供合成符号(combining character),即原字符与重音符号的合成,两个字符合成一个字符,比如O(\u004F)和ˇ(\u030C)合成Ǒ(\u004F\u030C)。
ES6提供字符串实例的normalize()方法,用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。

7.includes(), startsWith(), endsWith()

传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。

8.repeat()

repeat方法返回一个新字符串,表示将原字符串重复n次。

9.padStart(),padEnd()

ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

10.模板字符

ES6引入了模板字符串解决动态html插入的问题。(模板引擎)

11.实例:模板编译

模板字符串使用“<%...%>”放置JavaScript代码,使用“<%= ... %>”输出JavaScript表达式。

12.标签模板

模板字符串的功能,不仅仅是上面这些。它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。

13.String.raw()

String.raw方法,往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。

14.模板字符串的限制

内嵌其他语言,模板字符串默认会将字符串转义,因此导致了无法嵌入其他语言。对字符串转义的放松,只在标签模板解析字符串时生效