假设我正在尝试创建一个全局变量x,如果它还不存在:
x = x || {}; //This fails. x is not defined
this.x = this.x || {}; //But this works
我在Firebug中运行它并且对第一行失败感到惊讶。我希望x被附加到全局窗口对象,但除非我指定this
,否则它不起作用。
我希望提高对语言的理解。有人能解释一下为什么会这样吗?
感谢您的帮助。
答案 0 :(得分:2)
如果您尝试在表达式的一部分中使用未声明的变量,则会引发ReferenceError
抛出。
如果您尝试分配未声明的变量,则该变量将被声明为隐式全局变量。隐含的全局变量很糟糕。
x = x || {};
^ its this x that breaks it.
要正确检查是否声明了变量,您应该使用typeof variable === "undefined"
检查。
未定义的属性(在第二个示例中,x
是this
上的属性),默认情况下保留值undefined
。