javascript中对变量是否存在进行判断,比如:
为什么会是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了。
这样解释,好理解吧。