解构赋值
解构赋值说白了就是一种模式匹配,等号左右两边对应变量和值。解构赋值可以是完全解构赋值,即每个值与右边一一对应,也可以是不完全解构赋值,即只取等号右边值的一部分。解构赋值可以对变量取默认值。
解构赋值取默认值的条件是,对应值不全等于undefined,ES6全都是用 ===
即全等来判定是否为对等
数组的解构赋值
数组的解构赋值比较简单,即[]
两边匹配即可
let [x,y] = [1,2] // x =1,y=2
let [z,m=1] = [1] // x = 1,m=1
let [a,[b,c],d] = [1,[2,3],4] // a = 1,b=2,c=3,d=4
对象的解构赋值
对象的解构赋值是有模式的
let {foo,foo:{a},foo:{a:[x,y,z=4]}} = {foo:{a:[1,2]}}
// foo:{a:[1,2,3]}
// a:[1,2,3]
// x=1,y=2,z=4
每个逗号都是一个模式,变量的属性值必须跟对象的属性值相一致,否则无法成功为 undefined
。
对象的解构本质上是下面的简写
let {foo:foo,baz:baz} = {foo:1,baz:2}
// foo:1,baz:2
对于已经声明的变量进行赋值解构,要注意花括号的方式,系统会把它当作块级作用域,所以我们要非匹配模式的部分增加括号。
let foo
{foo} = {foo:1}
// 报错 Uncaught SyntaxError
let foo
({foo} = {foo:1})
// foo : 1
数组本质是特殊的对象,所以可以这样取值:
let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3
字符串的解构
在字符串的解构过程中,首先会把字符串转变成数组,当然,会有一个length属性。
数值和布尔值
赋值解构只要等号右边不是数组跟对象,都会优先转换为对象
用途
交换变量的值
[x,y] = [y,x]
从函数返回多个值
函数参数的定义和默认值
提取JSON的值
遍历map解构
指定模块的输出方法
网友评论