变量作为JavaScript中的属性

时间:2009-06-23 07:20:34

标签: javascript

考虑以下代码:

<script type="text/javascript">
  if ('mySuperProperty' in window) 
  {
    alert(window['mySuperProperty']);
  }
  var mySuperProperty = 1;
</script>

即使mySuperProperty尚未设置,if语句的条件求值为true。为什么呢?

Try it yourself

我从http://dfilatov.blogspot.com/2009/04/javascript.html(俄语)偷了这个问题

2 个答案:

答案 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值。