javascript - 为什么 "foo = foo || {};"不起作用?

标签 javascript

我在我的浏览器控制台中尝试使用一些 javascript,但不确定为什么它不起作用。控制台中的以下代码和我尝试的 jsfiddle 会引发错误:Uncaught ReferenceError: foo is not defined

foo = foo || {}; 

我对此的解释是:如果全局对象(在本例中为窗口)的 foo 不存在,则将其创建为一个空对象。

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

最佳答案

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

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

这可能有点不直观,但是未定义和值为 undefined 是有区别的(当 window.foo 没有 window 属性时,foo 返回)。

更好的方法是添加 var关键词:

var foo = foo || {};

这是有效的,因为 JavaScript 将变量声明提升到当前范围的顶部,声明 foo并给它一个值 undefined :

var foo;

foo = foo || {};

关于javascript - 为什么 "foo = foo || {};"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16272458/

相关文章:

javascript - MySql SELECT 多个根据表单输入并发布

javascript - 如何在div内保持移动的div

php - 使用 CodeIgniter 和 jQuery(AJAX) 的一页网站

javascript - HTML 元素数组未定义

javascript - 不使用提交按钮触发标准 HTML5 验证(表单)?

javascript - 如何在angularjs中将ng-model的初始值设置为空字符串?

javascript - 测试 mongo 脚本中参数是否存在

javascript - 随机整数函数差异

javascript - 如何在nextjs中添加字体ttf文件

javascript - 用 JavaScript/DoJo 去掉前导零?