字符串的遍历器接口:
ES6为字符串添加了遍历器接口,使得字符串可以被for…of循环遍历。
for (let codePoint of 'foo') {
console.log(codePoint)
}
// "f"
// "o"
// "o"
模板字符串:
模板字符串是增强版的字符串,用反引号标识。它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。如果模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。模板字符串中嵌入变量,需要将变量名写在${}
之中,大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性,还能调用函数。
// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串
`In JavaScript this is
not legal.`
// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
如果在模板字符串中还需要使用反引号,则前面要用反斜杠转义。
let greeting = `\`Yo\` World!`;
标签模板:
模板字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串,这被称为"标签模板"功能。
标签模板其实不是模板,而是函数调用的一种特殊形式。标签指的就是函数,紧跟在后面的模板字符串就是它的参数。函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分;函数的其他参数,都是模板字符串各个变量被替换后的值。
let name = 'Lee';
show `我是${name}!`;
function show(arr,name){
console.log(arr);
console.log(name);
}
实例方法:normalize():
ES6提供字符串实例的normalize()方法,用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。
'\u01D1'.normalize() === '\u004F\u030C'.normalize()
// true
实例方法:includes()、startsWith()、endsWith():
传统上,JavaScript只有indexOf()方法,可以用来确定一个字符串是否包含在另一个字符串中。
ES6又提供了三种新方法:
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = '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
实例方法:repeat():
repeat()方法返回一个新字符串,表示将原字符串重复n次。
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
参数如果是小数,会被向下取整。
'na'.repeat(2.9) // "nana"
如果repeat()的参数是负数或者infinity,会报错。
'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError
但是,如果参数是0到-1之间的小数,则等同于0,这是因为会先进行取整运算。0到-1之间的小数,取整以后等于-0,repeat视同为0。
'na'.repeat(-0.9) // ""
参数NaN,等同于0。
'na'.repeat(NaN) // ""
如果repeat()的参数是字符串,则会先转换成数字。
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"
实例方法:padStart()、padEnd():
ES2017引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。这两个方法都接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。
'xxx'.padStart(2, 'ab') // 'xxx'
如果用来补全的字符串与原字符串,两者的长度之和超过最大长度,则会截去超出位数的补全字符串。
'abc'.padStart(10, '0123456789')
// '0123456abc'
如果省略第二个参数,默认使用空格补全长度。
'x'.padStart(4) // ' x'
实例方法:trimStart()、trimEnd():
ES2019对字符串实例新增了trimStart()和trimEnd()这两个方法。它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原字符串。
浏览器还部署了额外的两个方法,trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名。
除了空格键,这两个方法对字符串头部(或尾部)的tab键、换行符等不可见的空白符号也有效。
const s = ' abc ';
s.trim() // "abc"
s.trimStart() // "abc "
s.trimEnd() // " abc"
实例方法:matchAll():
matchAll()方法返回一个正则表达式在当前字符串的所有匹配。