let { prop: x } = undefined // TypeError
let { prop: y } = null // TypeError
用途
引入模块的指定方法
函数参数的定义
函数参数的默认值
从函数返回多个值
交换变量的值
提取 JSON 数据
遍历 Map 结构
// 任何部署了 Iterator 接口的对象都可以使用 for...of 循环遍历
// 搭配解构赋值,获取键名和键值更加方便
const map = new Map()
map.set('first', 'hello')
map.set('second', 'world')
for (let [key, value] of map) {
console.log(key + ' is ' + value)
}
// first is hello
// second is world
三、字符串的扩展
字符的 Unicode 表示法:\u{20BB7}
给字符串添加了 Iterator 接口,使其可以用for...of 遍历
模板字符串
标签模版
标签模版带参数
四、字符串的新增方法
String.fromCodePoint()
可以识别大于\uFFFF 的码点
是对 String.fromCharCode() 的升级
作用与 str.codePointAt() 相反
String.row()
返回一个斜杠被转义的字符串
是专用于模板字符串的标签函数
str.codePointAt()
比较:charCodeAt()
对于32位的 UTF-16 编码的字符,可以正确返回大于 \xFFFF 的值,但长度还是2
要正确识别长度,可使用 for of 或者使用 ... 展开运算
str.normalize()
unicode 正规化
合成符号的概念
四个参数
不能识别中文
str.includesstr.startsWithstr.endsWith
返回布尔值,均支持第二个参数,表示开始检索的位置
原有的 indexOf 用来查看字符串是否包含在另一个字符串之中
str.repeat()
返回一个字符串,是原字符串重复n遍
小数参数会被向下取整
参数是 Infinity 或 负数会报错
str.padStart()str.padEnd()
补全长度
接收两个参数,第一个是长度,第二个是用于补全的字符串
省略第二个参数会用空格来补全
str.trimStart()str.trimEnd()
类似 str.trim(),顾名思义
str.matchAll()
str.replaceAll()
和 replace 一样,返回新字符串,不改变原字符串
第二个参数中的特殊字符串:$&$`$'$n$$
五、正则的扩展
构造函数的扩展,允许 var reg = new RegExp(/xyz/ig, 'i') 形式(即第一个参数是表达式的情况下,允许第二个参数将 flags 覆盖),会等同于 var reg = /xyz/i