数组的解构赋值

2018-08-23  本文已影响0人  小龙虾Julian

定义:从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)

(1)如果结构不成功,变量的值就为undefined
(2)不完全解构(简单理解为左侧变量少,右侧值多)
(3)如果等号右边的不是数组(或者严格的说,不是可遍历的解构),那么将会报错
(4)解构赋值允许使用默认值,但要注意,ES6内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。如:

let [x = 1] = [undefined];
x // 1

let [x = 1] = [null];
x // null

上面代码中,如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。
(5)如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。如:

function f() {
  console.log('aaa');
}

let [x = f()] = [1];

上面代码中,因为x能取到值,所以函数f根本不会执行。上面的代码其实等价于下面的代码。

let x;
if ([1][0] === undefined) {
  x = f();
} else {
  x = [1][0];
}

(6)默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

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] = [];     // ReferenceError: y is not defined

最后一个表达式之所以会报错,是因为x用y做默认值时,y还没有声明。

上一篇 下一篇

猜你喜欢

热点阅读