JavaScript: 为什么 false.something 的评估结果是 undefined?

4
在学习可选链操作符时,我进行了一些实验,发现这两个表达式的结果都是undefined:
false.nonExistingProperty // undefined
true.nonExistingProperty // undefined

但是为什么会这样呢?这不应该报错吗?

1
请参考以下链接:https://stackoverflow.com/questions/53149349/how-does-primitive-types-in-javascript-have-methods-and-properties,https://stackoverflow.com/questions/47935826/javascript-getting-and-setting-properties-on-primitives-implicitly-creates-obj,https://stackoverflow.com/questions/5751704/javascript-do-primitive-strings-have-methods - undefined
3个回答

9
当在原始类型上访问属性时,JavaScript会自动将值封装成包装对象,并在该对象上访问属性。

https://developer.mozilla.org/en-US/docs/Glossary/Primitive

在这里,falsetrue被隐式转换为Boolean对象,也就是说,您正在从Boolean而不是布尔原始类型中读取nonExistingProperty

2
在JavaScript中,当您尝试访问原始值(如true或false)上的属性时,语言会执行"boxing"操作,将原始值临时转换为其对象包装器(在这种情况下为Boolean对象),以允许属性访问。完成属性访问后,临时对象包装器将被丢弃。
在您的示例中:
false.nonExistingProperty访问了false布尔值上的属性。JavaScript会将false临时装箱为Boolean对象,但该对象没有nonExistingProperty属性。由于该属性不存在,结果为undefined。
类似地,true.nonExistingProperty访问了true布尔值上的属性。JavaScript会将true装箱为Boolean对象,该对象也没有nonExistingProperty属性,结果同样为undefined。
这种行为是JavaScript的强制和类型转换规则的一部分。当在原始值上访问不存在的属性时,JavaScript不会抛出错误,而是返回undefined。这种行为旨在防止运行时错误,并使JavaScript更加宽容和灵活。

-1
在JavaScript中,当你尝试访问一个原始值(如false)的属性时,JavaScript会使用对象包装器的概念将原始值内部强制转换为对象。这些对象包装器是临时对象,围绕原始值创建的,允许你访问它们的属性和方法。
当你尝试访问false的一个不存在的属性,比如false.nonExistingProperty,JavaScript会在false原始值周围创建一个对象包装器。然而,由于这个对象上没有名为nonExistingProperty的属性,表达式的结果是undefined。

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好的回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接