为什么“foo = foo || {};”不行?
问题描述:
我在浏览器控制台中尝试了一些javascript,并且不确定为什么这不起作用。在我尝试控制台和的jsfiddle下面的代码引发错误:未捕获的ReferenceError:未定义富为什么“foo = foo || {};”不行?
foo = foo || {};
我解释这个问题的方法是:如果全局对象的FOO(在这种情况下,窗口)不存在,则将其创建为空对象。
或者,代码window.foo = window.foo || {}
;按我的预期工作。事先为foo指定一个值foo = 'bar'
使得原来的语句也可以在以后运行。
答
你必须检查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
'var foo = foo || {};'这将按预期工作,至少在Chrome中。 – Kao 2013-04-29 06:34:31
正确,它使用var关键字时有效,但不是没有。 – 2013-04-29 06:46:35