// 变量解构赋值
let [a1, b1, c1] = [1,2,3];
console.log(a1,b1,c1);
// 变量解构赋值 存在默认值
let [a2=1, b2, c2=2] = [, 3, 4];
console.log(a2,b2,c2);
// f()惰性执行 在用到的时候才会执行 即只有当元素成员严格等于====undefined时候才会执行
function f(){
console.log('f is run');
return 3;
}
let [x=f()] = [undefined];
console.log(x);
// 对象的解构赋值,对象解构赋值需保证属性名相同才可以赋值 解构失败为undefined 也可指定默认值
let {a3, b3} = {b3: '4', a3: '6'};
console.log(a3,b3);
// 对象解构 可以将对象的方法赋值给某个变量
function SetObj(){
var obj = new Object();
obj.name = 'lishang',
obj.age = 23;
obj.sayHello=function(){
console.log('hello world');
}
return obj;
}
let tempObj = SetObj();
let {name, age, sayHello} = tempObj;
console.log(name, age);
sayHello();
// 因为let {foo} === let {foo: foo} 所以对象的解构是先找到同名的属性 再赋给对应的变量
let {a4: b4} = {a4: 7};
console.log(b4);
//console.log(a4); // error:a4 is not defined
// 数组作为特殊的对象 也可进行解构
let tempArr = [1, 3, 6];
let {0:first, [tempArr.length-1]: last} = tempArr;
console.log(first);
console.log(last);
// 函数参数的解构 数组方式
function testOne([x,y]){
console.log(x, y);
}
//对象方式
function testTwo({x,y}){
console.log(x,y);
}
// 参数可设置默认值
function testThree({x=0, y=1}={}){
console.log(x, y);
}
testOne([3,4]);
testTwo({y:4,x:3});
testThree({x:2,y:3});
testThree({y:3});
testThree({});
testThree();