这两个javascript布尔表达式之间有什么区别吗?

时间:2013-02-06 06:17:33

标签: javascript

我可以通过两种方式检查变量或属性是否存在。

第一个断言没有返回假值。

1。

var testVar;
if(!testVar){

    //use testVar becuase it exists 

}

第二个明确断言这两个条件。

2

var testVar;

if(testVar !== undefined && testVar !== null){

    //use testVar becuase it exists 

}

目的是检查对象/字符串/数字/数组是否存在,两者之间是否存在差异?

3 个答案:

答案 0 :(得分:2)

他们是不同的。如果您尝试将{}1true"nyan cat" nyan! ...放入testVar,则会返回false } !testVar

var testVar = {};
if(!testVar){  //false
    //will not be executed, but testVar does exist
}

enter image description here

检查变量是否存在的更好方法:

typeof(randomVar); //undefined
typeof(window);    //object

PS

var testVar;
if(!testVar){
    //...
}

这实际上不会检查它是否存在。尝试

var testVar = "something";
if(!testVar){              //false
    console.log("Exist.");
}
//nothing happens.

答案 1 :(得分:0)

您可以通过调用Object.hasOwnProperty()来检查对象属性是否存在,但是您无法检查变量是否存在,因为您无法显式引用当前堆栈帧。

答案 2 :(得分:0)

0,-0,null,false,NaN,undefined和空字符串“”将被评估为false。

如果值为0的testVar是有效条件,则第一个解决方案仍将其视为“false”。所以,第二种解决方案可以更好地为您提供服务。