数值和布尔值的解构赋值
解构赋值时,如果等号右边是数值和布尔值,则会先转化为对象。
let {tmp: s} = 123;
s === Number.prototype.tmp // true
let {tmp: s} = true;
s === Boolean.prototype.tmp // true
上面代码中,数值和布尔值的包装对象都要tmp属性,因此s都能取到值undefined
解构赋值的规则是,只要等号右边的不是对象或数组,就先将其转化为对象,由于undefined和null无法转换为对象,所以对它们进行解构赋值,都会报错。
let { prop: x } = undefined;// TypeError
let { prop: y } = null;// TypeError