看如下两端代码
- block1
function testUndefined1() {
var a = "a";
if(a!==b){
return "true";
}
else{
return "false";
}
}
- block2
function testUndefined2() {
var a = "a";
var b;
if(a!==b){
return "true";
}
else{
return "false";
}
}
这两个方法的执行结果分别是什么?
block1报错如下:
ReferenceError: b is not defined
block2运行结果为:true;
这两段代码的区别就在于第二段代码中的变量b是申明了的,只不过没有初始化,所以它的值是undefined,但是在js中undefined也是一个值,所以它是可以与其他表达式比较的。
但是在代码片段1中,b是完全没有申明的,所以只要拿变量b做任何运算都会报错not defined(没有申明过),而不是未初始化undefined。
加入我们对block1做如下修改
function testUndefined1() {
var a = "a";
b = 1;
if(a!==b){
return "true";
}
else{
return "false";
}
}
则执行结果为true,这里我们是对b直接进行了赋值,在js我们不用初始化也是可以的,但非常不建议这样使用,因为此时的b就成了一个全局变量了。