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

问题描述:

我在浏览器控制台中尝试了一些javascript,并且不确定为什么这不起作用。在我尝试控制台和的jsfiddle下面的代码引发错误:未捕获的ReferenceError:未定义富为什么“foo = foo || {};”不行?

foo = foo || {}; 

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

或者,代码window.foo = window.foo || {};按我的预期工作。事先为foo指定一个值foo = 'bar'使得原来的语句也可以在以后运行。

+0

'var foo = foo || {};'这将按预期工作,至少在Chrome中。 – Kao 2013-04-29 06:34:31

+0

正确,它使用var关键字时有效,但不是没有。 – 2013-04-29 06:46:35

你必须检查foo是否首先被定义:

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

它可能有点不直观,但是未定义的,并具有的值之间的差undefined(其window.foo返回时window没有按”没有foo属性)。

一个更好的办法是添加了var关键字:

var foo = foo || {}; 

其中一期工程,因为JavaScript卷扬变量声明到当前范围的顶部,宣布foo,给它的undefined值:

var foo; 

foo = foo || {}; 
+0

啊,是清除它。感谢您的详细解答,非常感谢! – 2013-04-29 06:45:36