《ES6标准入门》读书笔记 第4章

Unicode强化

新的表示法

"u0061" === 'a' // 双字节Unicode
"uD842uDFB7" // 之前,大于uFFFF的Unicode必须拆写成两个双字节
"u{20BB7}" // ES6提供了这种表示法,无需拆写

codePointAt()

JS内部,字符采用UTF-16编码保存,每个字符固定两个字节。而之前的API,对于Unicode码点大于0xFFFF的字符,会被认为是两个字符。例如.length会为2,.charAt(0)不能读出整个字符(而只能读出前两个字节)。

对于占位两个双字节的字符,使用.codePointAt(0)会得到一个大于0xFFFF的值,就是该字符的码点,而.codePointAt(1)就无意义了。

String.fromCodePoint()

之前的API的String.fromCharCode当然也无法处理大于0xFFFF的字符(高位被舍去),而String.fromCodePoint可以。

for of支持

for of除了可以顺序遍历字符串外,还支持识别大于0xFFFF的码点。

其他新API

includes(),startsWith(),endsWith()

includes代替了indexOf !== -1。后两个判断是否以该子串开始或结束。

都可指定第二个参数n表示开始搜索的位置(前两个),或范围为前n个字符(endsWith)。

repeat()

'x'.repeat(3) // 'xxx'
'y'.repeat(0) // ''

padStart(), padEnd()

如果字符串不足某个长度,可在头或者尾补上特定子串或子串的一部分直到恰凑满长度。

模板字符串

使用反引号定义。在里面可以用${}嵌入变量或表达式。多行形式下所有空格和换行也会被保留。

模板字符串甚至可以嵌套。

`<p>${addrs.map(addr => `${addr.x} - ${addr.y}`)}</p>`

模板字符串还可以用来传参,这也是jsx``的实现原理。

tag`Hello ${x} world ${y}`
// 相当于
tag(['Hello ', ' world ', ''], x, y)

String.raw()

返回一个每一个反斜线自身都被转义的字符串。

原文地址:https://www.cnblogs.com/zxuuu/p/12870939.html