当我尝试使用未声明的变量时,我得到了ReferenceError
:
console.log(a); // Uncaught ReferenceError: a is not defined
我可以先使用一个变量,然后再定义它,这不会因为提升而成为问题。
console.log(a); // undefined
var a;
但是当我声明一个对象时,为什么执行上下文会让我使用它的任何属性?
var obj = {};
console.log(obj.a); // undefined
console.log(obj.why); // undefined
为什么即使从未在任何地方声明 a
和 why
也允许这些?
最佳答案
因为对象属性不是变量。规则不同。访问不存在的对象属性会返回 undefined
,而不是错误。这就是语言的设计方式。
除了“这就是 Eich 设计的方式”之外,对于差异的一个可能的解释是您没有声明对象属性。你只是使用它们。但是必须声明变量(The Horror of Implicit Globals 除外,现在我们没有严格模式)。
关于javascript - 为什么访问不存在的对象属性会导致 `undefined` 而不是抛出 `ReferenceError` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901994/