es6中关于数组解构、对象解构、字符串解构、数值和布尔值解构、函数参数的解构以及其应用场景。
数组的解构赋值
基本用法
1 | let [a, b, c] = [1, 2, 3]; |
解构不成功时,变量的值就等于undefined。
1 | let [foo] = []; |
解构成功还会出现不完全解构的情况
1 | let [x, y] = [1, 2, 3]; |
解构赋值允许指定默认值。
1 | let [x = 1] = [undefined]; |
对象的解构赋值
基本用法
1 | let { foo, bar } = { foo: "aaa", bar: "bbb" }; |
变量名与属性名一致时
1 | let { bar, foo ,baz } = { foo: "aaa", bar: "bbb" }; |
变量名与属性名不一致时
1 | let { foo: baz } = { foo: 'aaa', bar: 'bbb' }; |
上个例子出现foo
不能识别的情况,原因在于foo
是匹配的模式,baz
才是变量,下例中loc
是模式,也可以变量赋值。
1 | const node = { |
默认赋值解构。对象的属性值严格等于undefined时,取默认值。解构失败也会等于undefined
1 | var {x: y = 3} = {x: 5}; |
字符串的解构赋值
字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。
1 | const [a, b, c, d, e] = 'hello'; |
类数组存在length属性,可以通过该属性解构
1 | let {length : len} = 'hello'; |
数值和布尔值解构赋值
注意:解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
1 | let {toString: s} = 123; |
注意:解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。
1 | let { prop: x } = undefined; // TypeError |
函数参数的解构赋值
默认传参
1 | [[1, 2], [3, 4]].map(([a, b]) => a + b); |
函数默认传参
1 | function move({x, y} = { x: 0, y: 0 }) { |
函数值默认传参,undefined传参会触发函数默认值。
1 | function move({x = 0, y = 0} = {}) { |
用途
- 交换变量
1 | let x = 1; |
- 从函数返回多个值
1 | // 返回一个数组 |
- 函数参数的定义
1 | // 参数是一组有次序的值 |
- 提取JSON数据
1 | let jsonData = { |
- 函数参数的默认值
1 | jQuery.ajax = function (url, { |
- 遍历Map结构
1 | const map = new Map(); |
- 输入模块的指定方法
1 | const { SourceMapConsumer, SourceNode } = require("source-map"); |