1、数组的解构赋值
// 1、正常情况
[num1, num2] = [12, 34];
console.log(num1, num2); // 12 34
// 2、默认值
[num1=56, num2] = [, 34];
console.log(num1, num2); // 56 34
// 3、位置不对
[, num1, num2, num3] = [12, 34, 56];
console.log(num1, num2); // 34 56 undefined
// 4、交换变量值
[num1, num2] = [num2, num1];
console.log(num1, num2); // 34 56
// 5、嵌套数组
[num1, num2, [num3]] = [12, [34, 56], [78, 90]];
console.log(num1, num2, num3); // 12 [34, 56] 78
2、对象的解构赋值
// 1、只会赋给value,不会赋给key
let {m:m, n:n, o:o} = {m:"test", n:1, o:true};
console.log(m, n, o); // test 1 true
// // 2、上面的简写
let {m, n, o} = {m:"test", n:1, o:true};
console.log(m, n, o); // test 1 true
// 3、默认值。null!==undefined,所以把默认值覆盖了
let {m, n=2, o=true} = {m:"test", n:1, o:null};
console.log(m, n, o); // test 1 null
// 4、默认值
let {m, n:age=1} = {m:"test", n:2};
console.log(m, n, age); // test n is not defined 2