<script>
// 以前的写法.为变量赋值,只能直接指定值
let a = 1;
let b = 2;
let c = 3;
// ES6的允许写法
let [a, b, c] = [1, 2, 3]; //从数组中提取值,按照对应位置,对变量赋值
console.log(a, b, c); //1,2,3
// 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值.
// 当左右两边不完全匹配时,出现的两种情况。
// 1:
let [a, b] = [1];
console.log(a, b); //1,undefined
// 2:
let [a, b, c] = [1, 2, 3, 4];
console.log(a, b, c); //1,2,3
// 解构赋值允许指定默认值
let [a, b = 3] = [1, undefined];
console.log(a, b); //a = 1;b = 3而不是undefined;
// 需要注意的是:ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。
let [a, b = 3] = [1, null];
// console.log(a, b); //a = 1;b = null而不是3 null不严格等于undefined;
// 默认值可以引用解构赋值的其他变量, 但该变量必须已经声明
let [x = 1, y = x] = []; // x=1; y=1。匹配项为undefined,使用默认值
let [x = 1, y = x] = [2]; // x=2; y=2。x匹配2,默认值1无效。匹配项的第二个值不存在,y使用默认值,为x,而x=2,故,y = 2。
let [x = 1, y = x] = [1, 2]; // x=1; y=2。匹配项完全匹配,不严格等于undefined,所以不使用默认值。x = 1,y = 2。
let [x = y, y = 1] = []; // ReferenceError: y is not defined。y还未声明,不能使用。
</script>
数组的解构赋值
最新推荐文章于 2024-08-21 11:22:10 发布