30

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

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

1 回答 1

20

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

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

您可以在不使用它的情况下获得价值。在大多数情况下使用undefinedthen 会抛出异常。

相反,变量是在其范围内静态声明的。访问一个未声明的变量总是一个错误,这使得抛出ReferenceErrors 是合法的。

于 2013-10-11T12:29:37.630 回答