1、数组结构
<script>
window.onload = function(){
var a = 1;
var b = 2;
var c = 3;
var a = 1,b=2,b=3;
var [a,b,c] = [1,2,3]; //模式匹配
var [a,b,c] = [1,,3]; //b=undefined
var [a,b,c] = [1,[1,2],'a'];
//var a = 1;
//var b = [1,2];
//var c = 'a';
var [a,b,c] = [1,{name:'abc'},'a'];
//默认值 ===
let [x=4,y,z] = [1,2,3];
//x = 1 || 4
let [x=4,y,z] = [,2,3]; //x=4
let [x=1,y=2,z=3] = [5]; //5,2,3
let [x,y='b'] = ['a']; //a,b
//注意 成员等于undefined 默认值会生效
let [x =1] =[undefined]; //x=1
let [x,y='b'] = ['a',undefined]; //a,b
let [x =1] =[null]; //x = null
//默认值 函数
function f() {
return 'abc'
};
let [x=f()] =[1]; //获取的顺序 f()没有执行 1
let [x=f()] =[]; //abc
let [x=f()] =[undefined]; //abc
//坑
let [x=1,y=x] = []; //x=1;y=1;
let [x=1,y=x] = [2]; //x=2;y=2;
let [x=1,y=x] = [1,2]; //x=1;y=2;
let [x=y,y=1] = []; //error y并没有声明
}
</script>
2、对象结构
<script>
window.onload = function(){
//解构不仅仅用于数组,还用于对象
var obj = {
name:'abc',
age:18
};
let name = obj.name;
let age = obj.age;
let {name,age} = {name:'abc',age:18};
//对象解构与数组解构的不同:
//数组解构是按次序排列的,变量的取值由位置来决定
//对象解构没有次序,变量必须与属性同名
let {type,age} = {name:'abc',age:18}; //type undefined type没有匹配到属性同名
let {x,y} = {y:2,x:1}; //x=1,y=2
let {x:name,y} = {y:2,x:1}; //x是没有的, name = 1;
//X是匹配模式 name才是变量
let {name:n,age:a} = {name:'abc',age:18}; //n='abc' a = 18
}
</script>
3、字符串解构
4、函数解构