为什么“foo = foo || {};”不行?

时间:2013-04-29 06:27:57

标签: javascript

我正在我的浏览器控制台中尝试一些javascript,并且不确定为什么这不起作用。我尝试的控制台和jsfiddle中的以下代码会引发错误: Uncaught ReferenceError:foo未定义

foo = foo || {}; 

我解释这个的方式是:如果全局对象的foo(在这种情况下为窗口)不存在,则将其创建为空对象。

或者,代码window.foo = window.foo || {};像我期望的那样工作。使用foo = 'bar'预先为foo分配值会使原始语句在之后运行时也能正常工作。

1 个答案:

答案 0 :(得分:9)

您必须先检查是否先定义foo

foo = typeof foo !== 'undefined' ? foo : {};

这可能有点不直观,但是未定义和值undefined之间存在差异(当window.foo没有{{1}时,window会返回属性)。

更好的方法是添加foo关键字:

var

这是有效的,因为JavaScript将变量声明提升到当前范围的顶部,声明var foo = foo || {}; 并为其赋值foo

undefined