ES6新增特性——字符串的扩展

131 阅读1分钟

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() 等字符串的方法,有兴趣的同学可以深入了解。