【发布时间】:2013-11-10 04:47:29
【问题描述】:
来自http://dmitry.baranovskiy.com/post/91403200
if (!("a" in window)) {
var a = 1;
}
alert(a);
这是我得到的结果:
- Chrome 控制台 - [object 对象]
- 萤火虫 - 未定义
- Safari 控制台 - 未定义
- Jsfiddle - 1
这是怎么回事??!我期望未定义,因为“if”应该返回一个假(因为窗口中的“a”应该是假的,并且!假应该是真的,因此变量a永远不会得到一个值)。我错过了什么?
编辑:好的,我意识到首先执行 var 语句,窗口中的“a”只返回这样的变量是否存在。但是为什么 Firebug 和 jsfiddle 给出不同的答案呢?
【问题讨论】:
-
这里,
if并不重要,因为 var a 的范围仅在 if 块内。所有结果应为undefined。我刚刚在 ie、Chrome、ff、safari 和所有未定义的警报中进行了测试。 -
您正在使用哪些 jsfiddle.net 选项?默认值为“onLoad”(查看侧边栏),它将您的 JavaScript 包装在一个函数中,该函数将更改
a的范围。此外,严格地说vars 先执行并不完全正确,var a将被提升到范围的顶部,但a = 1部分留在原处。 -
还是不明白为什么webkit浏览器上的[object Object]...
-
Chrome 控制台输出未定义。尝试在干净的选项卡上运行它。
-
@FabrícioMatté 你是对的!我在加载了该网站 (dmitry.baranovskiy.com) 的选项卡上运行它。清洁选项卡给出未定义。
标签: javascript