有关javascript中判断变量是否存在的问题

发布时间:2020-05-22编辑:脚本学堂
本文介绍下,在javascript中判断变量是否存在的问题,对原因进行了解析,有需要的朋友,可以参考学习下。

javascript中对变量是否存在进行判断,比如:
 

复制代码 代码示例:
//代码:
if(!("num" in window)) {
  var num = 123;
}
alert(num);
 

为什么会是undefined呢?因为 !("num" in window) 返回的是false,if语句里面的代码根本就不执行,所以alert(num)当然会是undefined了。

为什么在if之前都没有声明num变量,可是为什么会("num" in window)会是true呢,又不得不讲JavaScript运行机制了。
首先,来看下面两段代码。
 

复制代码 代码示例:

//代码1:
alert("num" in window); //返回false
if(!("num" in window)) {
   num = 123;
}
alert(num); //输出:123

//代码2:
alert("num" in window); //返回true
if(!("num" in window)) {
   var num = 123;
}
alert(num); //输出:undefined

两段代码就差num变量前的var声明,为何如此呢?

这就需要了解下JavaScript的运行机制:
JavaScript引擎在初始化时,会先扫描作用域中的所有变量,并将所有var声明的变量注册到全局对象window上,并为这些变量的赋初值为undefined。而当运行代码时,会优先访问局部变量,如果没有这个局部变量就访问上一层的局部变量(如为闭包,上一层为闭包创建环境),直到访问到完全局变量。如果都没有这个变量,那么抛出异常。

由此可见,var并非只是声明全局和局部变量那么简单。
因此,上面的两段代码1和代码2相差一个var,那么就会去扫描var声明的num,并将其注册到window对象中。
当代码运行时,"num" in window就会返回true了。

这样解释,好理解吧。