我正在我的浏览器控制台中尝试一些javascript,并且不确定为什么这不起作用。我尝试的控制台和jsfiddle中的以下代码会引发错误: Uncaught ReferenceError:foo未定义
foo = foo || {};
我解释这个的方式是:如果全局对象的foo(在这种情况下为窗口)不存在,则将其创建为空对象。
或者,代码window.foo = window.foo || {}
;像我期望的那样工作。使用foo = 'bar'
预先为foo分配值会使原始语句在之后运行时也能正常工作。
答案 0 :(得分:9)
您必须先检查是否先定义foo
:
foo = typeof foo !== 'undefined' ? foo : {};
这可能有点不直观,但是未定义和值undefined
之间存在差异(当window.foo
没有{{1}时,window
会返回属性)。
更好的方法是添加foo
关键字:
var
这是有效的,因为JavaScript将变量声明提升到当前范围的顶部,声明var foo = foo || {};
并为其赋值foo
:
undefined