窗口属性和全局变量

时间:2016-10-18 12:22:02

标签: javascript object var ecmascript-5

我尝试在浏览器中运行以下代码。我认为属性window.a和全局a是内存中的相同单元格。有人可以给我一个解释这种行为的文章的链接。

// undefined
// if (window.a) {}

// Uncaught ReferenceError: a is not defined
// if (a) {} 

2 个答案:

答案 0 :(得分:0)

window是一个对象,即使尚未设置变量undefined,尝试访问未在对象上设置的键也始终返回a

var a = {}
a.b
>>> undefined

区别在于a执行变量查找(并且失败,因为您没有定义它),window.awindow对象执行属性查找,返回undefined

答案 1 :(得分:-1)

他们是一样的:

a = 1;
a === window.a // true

编辑:对不起,那里有点太快了...我没有回答任何问题。本文很好地解释了差异: https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/

“如果引用的基值未定义,则该引用被视为无法解析”

window.a // base value is window, reference object is a
a // base value is a