Es6学习笔记3

Posted by JayZhao on 2018-04-17

Es6学习笔记3

链接

字符串的扩展

Es6加强了对 unicode 的支持,并扩展了字符串。

1.字符串的 Uncode 表示法

JavaScript 用两个字节的形式来表示字符,对于超过两个字节的需要用两个双字节来表示。
Es6 改进之后:只要将码点放入大括号,就能正确解读该字符。

2.codePoint() 方法

JavaScript 对于需要四个字节存储的字符,charCodeAt 回返回两个双字节
ES6 提供了codePointAt方法,codePointAt方法会正确返回 32 位的 UTF-16 字符的码点。对于那些两个字节储存的常规字符,它的返回结果与charCodeAt方法相同。
返回的都是十进制的值,想转换程十六进制可采用 toString 方法
该方法还可用于判断字符属于双字节的字符还是四字节的字符

3.String.fromCodePoint()

ES5 提供String.fromCharCode方法,用于从码点返回对应字符,但是这个方法不能识别 32 位的 UTF-16 字符(Unicode 编号大于0xFFFF)。对于大于的字符回舍弃溢出个数的高位。

ES6 提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

注意,fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。

4.字符串的遍历接口

Es6为字符串添加了遍历器接口,使得字符串可以被 for…of 循环遍历。
:在遍历一个四字节的字符时候,简答的 for 循环回认为它包含两个字符,但却一个字符都打印不出来。而 for…of 循环可以正确识别。

5. at()

Es5 对字符串对象提供 charAt 的字符串方法对于四字节字符不能识别,Es6 提供 at() 方法可以返回正确字符。

6.normalize()

ES6 提供字符串实例的normalize()方法,用来将字符的不同表示方法统一为同样的形式,比如欧洲语言中的重音符号,可有两个字符组成,但是 JavaScript 无法识别。normalize 方法可接受四个参数。不能

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

传统 Javascript 只提供 indexOf 方法,Es6 又提供了以上新增方法。

8. repeat()

返回一个新的字符串,表示重复几次,为负数会报错,0 到-1 为 0,若为字符串会先解析成字符串。

9. padStart(), padEnd()

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

10. matchAll()

返回一个正则的所有匹配结果

11.模版字符串

Es6 新引入功能
模板字符串中嵌入变量,需要将变量名写在${}之中。大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性,以及调用函数。

默认接受的是字符串类型参数,若非字符串,则会采用一般方法转换成字符串。比如调用对象的 toString 方法,所以传入的参数若是未声明的则会报错。另外,模版字符串支持嵌套。

12.标签模版

字符串模版在函数上的应用,会形成我们称之为标签模版的功能。
标签模版的应用方面

  • html 字符串的过滤,防止恶意输入
  • 对语言的转换(国际化的处理)

13.String.raw()

ES6 还为原生的 String 对象,提供了一个raw方法。

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

15.模板字符串的限制

标签模板里面,可以内嵌其他语言。但是,模板字符串默认会将字符串转义,导致无法嵌入其他语言。