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

时间:2013-10-11 12:16:47

标签: javascript

如果我尝试引用一个不存在的变量,我会在JavaScript中获得ReferenceError。为什么引用不存在的对象属性会返回' undefined&#39 ;? 这是一些代码,只要我在浏览器中编写它:

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

1 个答案:

答案 0 :(得分:11)

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

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

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

相比之下,变量在其范围内被静态声明。访问未声明的变量总是一个错误,这会使投掷ReferenceError合法化。