String 扩展
# String 扩展
# Unicode 表示法
ES6 加强了对 Unicode 的支持,允许采用 \uxxxx
形式表示一个字符,其中 xxxx
表示字符的 Unicode 码点。
"\u0061" // 'a'
1
但是,这种表示法只限于码点在 \u0000
~ \uFFFF
之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。
"\uD842\uDFB7" // "𠮷"
"\u20BB7" // " 7"
1
2
3
2
3
上面代码表示,如果直接在 \u
后面跟上超过 0xFFFF
的数值(比如 \u20BB7
),JavaScript 会理解成 \u20BB+7
。由于 \u20BB
是一个不可打印字符,所以只会显示一个空格,后面跟着一个 7
。
ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。
"\u{20BB7}" // "𠮷"
1
有了这种表示法之后,JavaScript 共有 6 种方法可以表示一个字符。
'\z' === 'z' // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true
1
2
3
4
5
2
3
4
5
# 遍历器接口
ES6 为字符串添加了遍历器接口,使得字符串可以被 for...of 循环遍历。
for (let item of 'HelloWorld') {
console.log(item)
}
1
2
3
2
3
# 模板字符串
在 ES6 之前使用字符串时有很多痛点:
- 字符串很长要手动换行
- 字符串中有变量或者表达式,需要不断拼接
- 字符串中有逻辑运算,需要使用逻辑判断 + 字符串拼接
而在 ES6 的模板字符串很好的解决了这些问题:
- 模板字符串是增强版的字符串,用反引号标识
`string text`
1
- 模板字符串可以解析换行操作
`string text line 1
string text line 2`
1
2
2
- 模板字符串表示多行字符串时,所有的空格和缩进都会被保留在输出之中
`
<ul>
<li>first</li>
<li>second</li>
</ul>
`
// 上述代码中,<ul> 标签前面会有一个换行也被保留下来
// 如果不想要这个换行,可以使用 trim 方法消除它
`
<ul>
<li>first</li>
<li>second</li>
</ul>
`.trim()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 模板字符串中可以使用
${}
包裹变量或表达式
let name = 'zhangsan', age = 13
`My name is ${name}, I am ${age} years old.`
// 大括号内部可以放入任意的 JavaScript 表达式, 包括运算、引用对象属性等
let x = 1, y = 2
`${x} + ${y} = ${x + y}`
let obj = { x: 1, y: 2}
`${obj.x + obj.y}`
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 扩展方法
# String.prototype.fromCodePoint()
用于从 Unicode 码点返回对应字符,并且可以识别大于 0xFFFF
的字符。
// ES5
console.log(String.fromCharCode(0x20BB7))
// ES6
console.log(String.fromCodePoint(0x20BB7))
1
2
3
4
5
2
3
4
5
# String.prototype.includes()
ES5 中可以使用 indexOf 方法来判断一个字符串是否包含在另一个字符串中,indexOf 返回出现的下标位置,如果不存在则返回 -1
。
const str = 'HelloWorld'
console.log(str.indexOf('or'))
1
2
3
2
3
ES6 提供了 includes 方法来判断一个字符串是否包含在另一个字符串中,返回 boolean 类型的值。
const str = 'HelloWorld'
console.log(str.includes('or'))
1
2
3
2
3
# String.prototype.startsWith()
判断参数字符串是否在原字符串的头部,返回 boolean 类型的值。
const str = 'HelloWorld'
console.log(str.startsWith('el'))
1
2
3
2
3
# String.prototype.endsWith()
判断参数字符串是否在原字符串的尾部,返回 boolean 类型的值。
const str = 'HelloWorld'
console.log(str.endsWith('orld'))
1
2
3
2
3
# String.prototype.repeat()
repeat 方法返回一个新字符串,表示将原字符串重复 n 次。
const str = 'Hello'
const newStr = str.repeat(10)
console.log(newStr)
1
2
3
4
5
2
3
4
5
# 参考资料
(完)