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

如果我试图引用一个不存在的variables,我得到JavaScript中的ReferenceError。 为什么引用一个不存在的对象属性返回“undefined”? 这里是一些代码,只要我在浏览器中编写它:

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

这就是语言的工作原理。 其基于对象的方法非常灵活,您可以在运行时dynamic地添加,更新和删除对象的属性。 访问一个当前不存在的应该产生undefined而不是引发exception。 例如,这允许检查是否存在并input单个expression式:

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

你可以在不使用它的情况下得到这个值。 使用undefined将在大多数情况下抛出。

相反,variables是在其范围内静态声明的。 访问一个未声明的variables总是一个错误,合法的抛出ReferenceError