1、字符的Unicode表示法,只限于码点在 \u0000 ~ \uFFFF之间,超出必须用两个双字节表示。ES6对这点做出了改进,只要将码点放入大括号,就能正确解读该字符
"\u{20BB7}" // "?" "\u{41}\u{42}\u{43}" // "ABC" let hello = 123; hell\u{6F} // 123 '\u{1F680}' === '\uD83D\uDE80' // true
2、现在JavaScript有6种方法可以表示一个字符
'\z' === 'z' // true '\172' === 'z' // true '\x7A' === 'z' // true '\u007A' === 'z' // true '\u{7A}' === 'z' // true
3、字符串遍历器接口,使得字符串可以被 for...of 循环遍历;最大的优点是可以识别大于 0xFFFF的码点,传统的for循环无法识别
for (let codePoint of 'foo') { console.log(codePoint) } // "f" // "o" // "o"
4、新增API
codePointAt()
能够正确处理 4 个字节储存的字符,返回一个字符的码点。其参数,是字符在字符串中的位置(从 0 开始)
let s = '?a'; s.codePointAt(0) // 134071 s.codePointAt(1) // 57271 s.codePointAt(2) // 97
String.fromCodePoint()
用于从码点返回对应字符
String.fromCodePoint(0x20BB7) // "?" String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' // true
normalize()
用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。
接受一个参数来指定normalize
的方式,参数的四个可选值如下。
NFC
,默认参数,表示“标准等价合成”NFD
,表示“标准等价分解”NFKC
,表示“兼容等价合成”NFKD
,表示“兼容等价分解”
'\u01D1'.normalize() === '\u004F\u030C'.normalize() // true
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
let s = 'Hello world!'; s.startsWith('Hello') // true s.endsWith('!') // true s.includes('o') // true
repeat()
返回一个新字符串,表示将原字符串重复n
次
参数:
- 小数会被向下取整
- 负数或Infinity 报错
- 0到-1之间的小数等同于0
- NaN等同于0
- 字符串会先被转换成数字
'x'.repeat(3) // "xxx" 'hello'.repeat(2) // "hellohello" 'na'.repeat(0) // ""
padStart():字符串补全长度,头部补全
padEnd():字符串补全长度,尾部补全
一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。
- 原字符串的长度 >= 指定最小长度,返回原字符串
- 用来补全的字符串与原字符串之合的长度 > 指定的最小长度,会截取超出位置的补全字符串
- 省略第二个参数,默认使用空格补全
x'.padStart(5, 'ab') // 'ababx' 'x'.padStart(4, 'ab') // 'abax' 'x'.padEnd(5, 'ab') // 'xabab' 'x'.padEnd(4, 'ab') // 'xaba'
matchAll()
返回一个正则表达式在当前字符串的所有匹配
String.raw()
a、往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
String.raw`Hi\n${2+3}!`; // 返回 "Hi\\n5!" String.raw`Hi\u000A!`; // 返回 "Hi\\u000A!"
b、此方法也可以作为正常的函数使用,它的第一个参数,应该是一个具有row属性的对象,且值是数组。
String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t' // 等同于 String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);