字符串新增方法
1,String.fromCodePoint()
Es6 提供了 String.fromCodePoint() 方法,可以识别大于 0xFFFF 的字符,补充了 String.fromCharCode() 方法的不足。
String.fromCodePoint(0x20BB7)
// '告'
String.fromCodePoint(0x78,0x1f680,0x79) === 'x\uD83D\uDE80y'
// true
如果 String.fromCodePoint() 有多个参数,则会合成一个字符串返回。
注意:fromCodePoint() 方法定义在 String 对象上,而 codePointAt() 方法定义在字符串实例对象上。
2,String.raw()
Es6 还为原生的 String 对象听哦你了 raw 方法。该方法返回一个斜杆都被转义(即斜杠前面再加一个斜杠)的字符串。往往用于模板字符串的处理方法。
String.raw'Hi\n${2+3}!';
// 返回 "Hi\\n5!"
如果原字符串的已经转义,那么 String.raw() 会再次进行转义。
String.raw'Hi\\n'
// 返回 "Hi\\\\n"
String.raw() 方法可以作为处理模板字符串的基本方法,它会将素有变量替换,而且对斜杠进行转义,方便下一步作为字符串来使用。
3,codePointAt()
JavaScript 内部,字符以 UTF-16 的格式存储,每个字符固定为 2 个字节。对于那些需要 4 个字节存储的字符(Unicode 码点大于 0xFFFF 的字符),JavaScript 会认为它们是两个字符。
4,normalize()
Es6 提供了字符串实例的 normalize() 方法用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。
'\u01D1'.normalize() === '\u004f\u030c'.normalize()
// true
5,includes() startsWith() endsWith()
传统上,JavaScript 只有 indexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中。Es 6 又提供了三种新的方法。
includes():返回布尔值,表示是否找到了参数字符串
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
let str = 'hello world !';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true
这三个方法都支持第二个参数,表示搜索的位置。
let s = 'Hello world!';
s.startsWith('world',6)// true
s.endsWith('Hello',5)// true
s.includes('Hello',6)// false
从上面我们可以看出来,使用第二个参数的时候,endsWith 的行为与其他两个方法有所不同,它针对前 n 个字符,而其他两个方法,针对从第 n 个位置知道字符串结束。
6,repeat()
repeat() 方法返回一个新的字符串,表示将原字符串重复 n 次。
'x'.repeat(3) // "xxx"
'haha'.repeat(0) // "" (空字符串。)
如果是小数,则会取整。
'na'.repeat(2.9);// "nana"
如果参数是负数或者 Infinity,会报错。
'str'.repeat(Infinity)
// RangeError
'str'.repeat(-1)
// RangError
但是如果是参数是 0 到 -1 之间的小数,则等同于 0 ,这是因为会先进行取整运算。
参数 NaN 等同于 0。
如果 repeat() 参数是字符串,则会先转成数字
'str'.repeat('nan'); // ""
'str'.repeat('3'); // "nanana"
7,padStart() padEnd()
Es2017 引入了字符串补全长度的功能,如果某个字符串不够指定长度,会在头部或尾部补全。padStart() 用于头部补全,padEnd() 用于尾部补全。
'x'.padStart(5, 'st') // 'ststx'
'x'.padStart(4, 'st') // 'stsx'
padStart() 和 padEnd() 一共接受两个参数,第一是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。
'xxx'.padStart(2,'s'); // 'xxx'
如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截取超出位数的补全字符串。
'abc'.padStart(10,'123456789');
// '1234567abc'
如果省略掉第二个参数,默认使用空格补全长度。
'x'.padStart(4); // ' x'
padStart() 的常用用途是为数值补全指定位数。下面代码生成 10 位数值字符串。
'1'.padStart(10, '0') // 0000000001
'12'.padStart(10, '0') // 0000000012
另一个用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // YYYY-MM-12
'09-12'.padStart(10, 'YYYY-MM-DD') // YYYY-09-12
8,trimStart() trimEnd()
Es2019 对字符串实例新增了 trimStart() 和 trimEnd() 这两个方法。它们的行为与 trim() 一致,trimStart() 消除字符串头部的空格,trimEnd() 消除尾部的空格,它们返回都是新字符串,不会修改原来的字符串。
const s = ' str ';
s.trim() // 'str'
s.trimStart() // 'str '
s.trimEnd() // ' str'
9,matchAll()
matchAll() 方法返回一个正则表达式在当前字符串的所有匹配。