Unicode表示法
js允许\uxxxx
表示\u0000~\uFFFF之间的字符,超出范围须用两个双字节的形式表示。
针对这一点,es6改进可通过\u{xxxx}
的方式来实现。
1 | '\z' === 'z' // true |
点击跳转Unicode详细介绍。
String.prototype.codePointAt(pos)
相对于String.prototype.charCodeAt()
返回0到65535,处理UTF-16的单一编码。
该方法能够正确处理 4 个字节储存的字符,传入元素索引的位置,返回在字符串中的给定索引的编码单元体现的数字,未找到返回undefind
。字符为两个字节时,返回结果同charCodeAt
方法相同。
1 | let s = '𠮷a'; |
对于上例中a的下标为2,而不是1,可以通过for...of...
来解决。
1 | let s = '𠮷a'; |
String.fromCodePoint(num1[, …[, numN]])
相对于String.fromCharCode(num1, ..., numN)
不能识别大于0xFFFF的码点。如果大于,最高位2被舍弃。
该静态方法返回使用指定的代码点序列创建的字符串。传入一串 Unicode 编码(多参数会合并),返回 Unicode 编码创建的字符串。参数异常,抛出RangeError
。
1 | String.fromCodePoint(0x20BB7) |
字符遍历器for…of
相对于传统for,优点是可以识别大于0xFFFF的码点
1 | let text = String.fromCodePoint(0x20BB7); |
String.prototype.normalize()
按照指定的一种 Unicode 正规形式将当前字符串正规化。传入了非法的参数值, 则会抛出 RangeError 异常.默认NFC
形式。
1 | var str = "\u1E9B\u0323"; |
includes(), startsWith(), endsWith()
相对于js只有indexof()
方法,es6新增三种.
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
第一个参数为需要搜索的字符,第二个参数为开始搜索的位置。endsWith的第二个参数为前N个字符搜索。
1 | let s = 'Hello world!'; |
String.prototype.repeat()
构造并返回一个新字符串,该字符串包含被连接在一起的指定数量的字符串的副本。参数为负数或infinite
,抛出RangeError
错误。
1 | 'x'.repeat(3) // "xxx" |
padStart(),padEnd()
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。第二个参数省略时,用空格代替。
1 | 'x'.padStart(5, 'ab') // 'ababx' |
模板字符串
ES6 引入反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。定义多行字符串时,空格会被保留。
1 | // 普通字符串 |
标签模板
模板字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。
1 | alert`123` |
String.raw()
es6为原生String 对象,提供了一个raw方法。用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
如果原字符串的斜杠已经转义,那么String.raw不会做任何处理。
1 | String.raw`Hi\n${2+3}!`; |