概念:ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为“解构”。
一.数组的解构赋值
1: 以前为变量赋值:
let a=1;
let b=2;
let c=3;
ES6 允许写成:let[a,b,c]=[1,2,3];
也可以写成这样 let[a,[b,[c]]]=[1[[2]3]];
or :let [,,third]=["foo","bar","zee"];
or:let [head,...taill]=[1,2,3,4];
But:let [foo]=[] || let [bar,foo]=[1]
这两种情况解构不会成功,foo的值等于undefined,
2:解构允许有默认值
eg:let [foo=true]=[] //foo true;
let [x,y='c]=['a'] //x='a',y='c';
let [x,y='b] =['a',undefined];// x='a',y='b';
再看个特殊的:let [x=1]=[undefined] || let [x=1]=[null] 这两种情况x=?,答案 x//1 x//null;
这是因为ES6 使用严格运算符===判断一个位置是否有值,So,如果一个数组成员不严格等于undefined,默认值是不会生效的,null不严格等于undefined;
二.对象的解构赋值
通常 我们const obj={foo:"aaa",bar:"bbb"}
解构的话 const {foo,bar}=obj;
!☆ 对象的解构和数组有重要的不同,数组元素是按“次序”排列的,变量的取值是由它的位置决定的,对象的属性没有次序,变量必须与属性同名才能取到正确的值。
×const {baz}={foo:"aaa",bar:"bbb"} //baz =undefined
与数组一样解构也可以是嵌套结构的对象。
let obj={
p:['hello',{y:"word"}]
}
解构:let{p:[x,{y}]}=obg;
对象的解构也可以指定默认值
let {x=3}={};
let{x,y=5}={x:1};
let{x:y=5}={x:1};
三.字符串的解构赋值
字符串的解构被转换成了一个类似数组的对象。
const [a,b,,c,d,e]='hello'
类似数组的对象都有一个length 属性,因此还可以对这个属性进行解构赋值
let{length:len}='hello';
len //5
四.函数参数的解构赋值
eg:[[1,2],[3,4]].map(([a,b])=>a+b) //[3,7]
数字和布尔值也可以进行解构赋值。
主要是前几天在解构赋值这里踩了坑,回头复习一下!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。