ES6 对字符串的扩展主要有:字符的 Unicode 表示法、字符串的遍历器接口、直接输入 U+2028 和 U+2029、JSON.stringify() 的改造、模板字符串、标签模板、模板字符串的限制、字符串的新增方法。
1、模板字符串
模板字符串是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
(1)普通字符串
`In JavaScript '\n' is a line-feed.`
(2)多行字符串,所有的空格和缩进都会被保留在输出之中
let list = `
<ul>
<li>列表项1</li>
<li>列表项2</li>
</ul>
`;
(3)字符串中嵌入变量,需要将变量名写在${}之中
// 在 ES6 以前,拼接字符串是很繁琐的
var name = 'css'
var hobby = ['coding', 'writing']
var finalString = 'my name is ' + name + ', I love ' + hobby[0] + ' and ' + hobby[1]
// ES6 模板语法不仅使字符串更容易拼了,也更易读了
var finalString = `my name is ${name}, I love ${hobby[0]} and ${hobby[1]}`
(4)${}大括号内还可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性
let x = 1;
let y = 2;
`${x} + ${y} = ${x + y}` // "1 + 2 = 3"
`${x} + ${y * 2} = ${x + y * 2}` // "1 + 4 = 5"
let obj = {x: 1, y: 2};
`${obj.x + obj.y}` // "3"
2、字符串的新增方法
(1)includes(), startsWith(), endsWith()
传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。
- includes() :返回布尔值,表示是否找到了参数字符串。
- startsWith() :返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith() :返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';
s.includes('o') // true
s.startsWith('Hello') // true
s.endsWith('!') // true
(2)repeat()
- repeat() :使原字符串输出多次(被连续复制多次)。
'a'.repeat(3) // "aaa"
'hello'.repeat(2) // "hellohello"
除了以上方法,ES6 还增加了 String.fromCodePoint()、String.raw()、codePointAt()、normalize()、padStart(),padEnd()、trimStart(),trimEnd() 等字符串的方法,有兴趣的同学可以深入了解。