一、字符串的 Unicode 表示法
ES6 中加强了对 Unicode 的支持。
unidode 使用\uxxxx
表示,\u 代表这是 unicode 字符,xxxx 表示 unicode 的码点,码点的取值范围是 0000~ffff。但是有一些的字符超出了码点的取值范围,我们可以使用\u{...}
的形式表示,这样码点的取值范围就被扩大了,例如 \u{20BB7},没有超出码点范围的字符也可以使用这种方式表示,例如 \u{41}。因此在 ES6 中,我们可以统一都用加上大括号的形式来表示字符,这就是 ES6 对 unicode 的一种改进。
我们还可以使用多种方式表示字符:
1 | '\z' === 'z' // \z并没有特殊含义,因此此时会忽略z前面的\,结果为true |
unicode 实际用到的情况并不多,我们了解即可。
二、字符串的遍历器
使用for of
对字符串进行遍历。
1 | for(let item of 'hello') { |
三、模板字符串
模板字符串是 ES6 中关于字符串扩展的重点知识,模板字符串的应用场景非常广泛。
模板字符串中使用反引号 ` 代替字符串中的 ‘ 和双引号 “ 。模板字符串让字符串的输入变得更加简单方便,我们可以看一下模板字符串和普通字符串的对比:
1 | const str1 = '床前明月光\n' |
模板字符串中可以使用三元表达式:
1 | const str5 = `icon-${isLarge?'big':'small'}` // isLarge为布尔值 |
带标签的模板字符串:
1 | const foo = (a,b,c,d) => { |
四、字符串的新 API
第一个是静态方法,其余四个都是实例方法。
1)String.fromCodePoint()
ES5 中使用 String.fromCharCode() 将码点转化为字符,但是这个方法识别的码点不能超过 ffff。ES6 中使用 String.fromCodePoint() 方法,这个方法可以识别更大的码点范围。
1 | console.log(String.fromCharCode(0x20BB7)) // 超出范围,无法正确输出 |
这个方法用得较少。
2)String.prototype.includes()
ES5 中使用 indexOf() 判断一个字符串是否存在与给定字符串中,若存在返回对应下标,否则返回 -1, indexOf() 方法的返回值为数字;ES6 中使用 includes() 判断给定一个字符串是否存在与给定字符串中,返回值为布尔值。
1 | const str = 'hello' |
3)String.prototype.startsWith()
判断字符串是否以某个字符串开头。
1 | const str = 'hello' |
4)String.prototype.endsWith()
判断字符串是否以某个字符串结尾。
1 | const str = 'hello' |
5)String.prototype.repeat()
用于重复字符串。
1 | const str = 'hello' |