字符串的拓展

ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。
ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。

1
2
3
4
5
6
for (let codePoint of 'foo') {
console.log(codePoint)
}
// "f"
// "o"
// "o"

charAt()

ES5 对字符串对象提供arAt方法,返回字符串给定位置的字符。该方法不能识别码点大于0xFFFF的字符。

1
2
'abc'.charAt(0) // "a"
'𠮷'.charAt(0) // "\uD842"

repeat()

repeat方法返回一个新字符串,表示将原字符串重复n次。参数如果是小数,会被取整。参数不能是小于等于-1的负数或Infinity

1
2
3
4
'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(-0.9) // ""
'na'.repeat(2.9) // "nana"

padStart(), padEnd()

ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

1
2
3
4
'x'.padStart(5, 'ab') // 'ababx'
'xxx'.padStart(2, 'ab') // 'xxx'
'x'.padEnd(4, 'ab') // 'xaba'
'x'.padEnd(4) // 'x ' 省略第二个参数,会用空格补全

includes(), startsWith(), endsWith()

传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
    1
    2
    3
    4
    let s = 'Hello world!';
    s.startsWith('Hello') // true
    s.endsWith('!') // true
    s.includes('o') // true