解构赋值的规则:只要等号右边的值不是对象,就先转为对象。由于undefined和null无法转为对象,所以对他们进行解构赋值,就会报错。
错误的写法:
var [x= 1] = undefined; // TypeError
var [x= 1] = null;// TypeError
正确的写法:
var [x= 1] = [undefined];
x // 1
var [x =1] = [null];
x = null
上面代码的解释说明:ES6内部使用严格相等运算符(===),判断一个位置是否有值。所以如果一个数组成员不严格等于undefined,默认值是不会生效的。
null===undefined
// false
undefined === undefined
// true