为什么在 JavaScript 中引用对象的不存在属性不会返回引用错误

why referencing non-existent property of an object in javascript doesn't return a reference error?

本文关键字:引用 属性 错误 返回 不存在 JavaScript 对象 为什么      更新时间:2023-09-26

如果我尝试引用一个不存在的变量,我会在JavaScript中得到ReferenceError。为什么引用不存在的对象属性会返回"未定义"?以下是一些代码,前提是我在浏览器中编写它:

alert(a);
ReferenceError: a is not defined //error is thrown
alert({}.a)
undefined //no error

这就是语言的工作方式。其基于对象的方法非常灵活,您可以在运行时动态添加、更新和删除对象的属性。访问当前不存在的应该会产生undefined,而不是引发异常。例如,这允许在单个表达式中检查是否存在和键入:

if (prop in obj && typeof obj[prop] == "function") obj[prop]();
// can be written shorter:
if (typeof obj[prop] == "function") obj[prop]();

您可以在不使用它的情况下获取该值。在大多数情况下,使用undefined会抛出。

相反,变量在其作用域中静态声明。访问未声明的变量始终是一个错误,这使得抛出ReferenceError s是合法的。