字符串的新增方法
首先,ES6对字符串引入了遍历器接口,因此可以使用
for...of...
遍历字符串的每个字符。
1. String.raw()
该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法,这里就先不多介绍了。
2. String.fromCodePoint()
可以识别大于0xFFFF的字符,弥补了ES5中String.fromCharCode()
只能识别两个字节的字符的不足,如
String.fromCharCode(0x20BB7)
// "ஷ"
String.fromCodePoint(0x20BB7)
// "𠮷"
补充:
ASCII码:一个英文字母(不分大小写)占一个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数。换算为十进制 ,最小值-128,最大值127。如一个ASCII码就是一个字节。
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
3. 实例方法:codePointAt()
在JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。
codePointAt()
方法能够正确处理 4 个字节储存的字符,返回一个字符的码点。对于那些两个字节储存的常规字符,它的返回结果与charCodeAt()
方法相同。
codePointAt()
方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("𠮷") // true
is32Bit("a") // false
4. 实例方法:normalize()
用于合成两个字符的,用的可能比较少,这里也不多介绍了。
5. 实例方法:includes(),startsWith(),endsWith()
三种方法都返回布尔值
includes()
表示是否找到了参数字符串
startsWith()
表示参数字符串是否在原字符串的头部
endsWith()
表示参数字符串是否在原字符串的尾部
这三个方法都支持第二个参数,表示开始搜索的位置。如
let s = 'Hello world!';
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
6. 实例方法:repeat()
repeat
方法返回一个新字符串,表示将原字符串重复n次。传入的参数是重复的次数。
如果参数是小数,会先取整(向下取整Math.ceil()
);
如果参数是负数或Infinity会报错,但是如果参数是0~-1之间的数,会先取整,变成-0,相当于0,也就是返回空字符串‘ ’
;
参数NaN等同于 0,也是返回空字符串;
如果参数是字符串,则先转换成数字,不能转化成数字的变成NaN
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"
7. 实例方法:padStart(),padEnd()
这两个方法都是字符串补长的方法。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()
用于头部补全,padEnd()
用于尾部补全。
两个方法一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。如
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
如果第一个参数小于字符串的原始长度,那么会返回原字符串。
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'
如果原字符串的长度和第二个参数传入的字符串长度之和超过了第一个参数,那么会截去超出位数的补全字符串。如
'abc'.padStart(10, '0123456789')
// '0123456abc'
如果省略第二个参数,则会传入空字符串补全。
8. 实例方法:trimStart(),trimEnd()
分别用于消除字符串头部和尾部的空格,不改变原字符串,返回一个新的字符串。功能相当于trim()
9. 实例方法:matchAll()
matchAll()
方法返回一个正则表达式在当前字符串的所有匹配。
参考文章: ES6入门——字符串新增方法,作者:阮一峰