Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  javascript  >  正文 有关javascript中判断变量是否存在的问题

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

发布时间:2014-12-14   编辑:www.jquerycn.cn
本文介绍下,在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了。

这样解释,好理解吧。

您可能感兴趣的文章:
有关javascript中判断变量是否存在的问题
PHP 判断常量、变量与函数是否存在的三个小例子
empty()和isset()函数的区别
谈谈javascript语法里一些难点问题(一)
JS判断对象是否存在的十种方法
php的未定义索引如何解决
JS动态判断radio是否选中的方法
php检查变量是否存在
js中null undefined 空的区别举例
javascript错误的认识不用关心内存管理

[关闭]