考虑以下代码:
<script type="text/javascript">
if ('mySuperProperty' in window)
{
alert(window['mySuperProperty']);
}
var mySuperProperty = 1;
</script>
即使mySuperProperty尚未设置,if语句的条件求值为true。为什么呢?
我从http://dfilatov.blogspot.com/2009/04/javascript.html(俄语)偷了这个问题
答案 0 :(得分:9)
我想这是因为: JS代码首先被解析和分析。 变量和函数此时会被实例化,但只有在执行期间,它们才会被赋予在declaratins中使用的值。这正是您在警报中获得“未定义”的原因。
答案 1 :(得分:1)
表达式“window.mySuperProperty”检查mySuperProperty的值,该值在警报 undefined
时另一方面, mySuperProperty in window 检查窗口是否有mySuperProperty,在整个窗口命名空间中检查(在设置每个属性名称之后)。
THEREFOR,
if(窗口中的'mySuperProperty')返回true&gt;变量存在,但还没有价值 if(window.mySuperProperty)返回false&gt; undefined是一个Falsy值。