JavaScript解构赋值中undefined、false、null的行为差异问题咨询
代码行为解释
1. var {a} = undefined 报错的原因
对象解构的执行前提是:等号右侧的值可以被强制转换为对象。
根据ECMAScript官方规范,undefined 和 null 是仅有的两个无法被转换为包装对象的原始类型,因此尝试对这两个值做对象解构时,会直接抛出 TypeError: Cannot destructure property 'a' of 'undefined' or 'null' 错误。
2. var {a} = false 时变量a为undefined的原因
布尔值 false 属于可转换为包装对象的原始类型,执行解构时,JS会先将false转换为对应的Boolean包装实例对象。
由于Boolean实例对象本身不存在 a 这个属性,读取JS对象不存在的属性时默认返回undefined,因此解构后变量a的赋值结果就是undefined。你可以运行console.log(new Boolean(false).a)验证,输出结果和你的解构结果完全一致。
内容的提问来源于stack exchange,提问作者C. Peck
相关产品推荐
相关产品推荐

