JavaScript中false/true访问不存在的属性为何返回undefined?
为什么访问true/false的不存在属性返回undefined而非报错?
这事儿核心在于JS的「自动装箱」机制:
true和false是布尔原始值,本身并不是对象,但当你尝试访问它们的属性时,JS会自动把它们包装成临时的Boolean对象。- 对于一个已经存在的对象(哪怕是临时的包装对象),访问它身上不存在的属性,本来就会返回
undefined,只有当你试图访问null或undefined的属性时,才会抛出类型错误。
对比看更清楚:
// 访问null的不存在属性,直接报错 null.nonExistingProperty // Uncaught TypeError: Cannot read properties of null (reading 'nonExistingProperty') // 访问布尔原始值的不存在属性,先装箱成Boolean对象,再返回undefined true.nonExistingProperty // undefined
而且这个临时生成的Boolean对象在属性访问结束后就会被销毁,不会对原始的布尔值产生任何影响。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

