如何用undefined或null检查falsy?

时间:2014-07-14 05:45:00

标签: javascript jquery

undefined和null在javascript中是假的,但是,

var n = null;
if(n===false){
console.log('null');
} else{
console.log('has value');
}

但它返回'有价值'当在控制台中尝试时,为什么不在' null' ?

4 个答案:

答案 0 :(得分:4)

解决您的问题:

您可以使用not operator(!):

var n = null;
if(!n){ //if n is undefined, null or false
console.log('null');
} else{
console.log('has value');
}
// logs null

回答你的问题:

布尔值被认为是假的或者是真的。所以如果你这样使用:

var n = Boolean(null);
if(n===false){
console.log('null');
} else{
console.log('has value');
}
//you'll be logged null

答案 1 :(得分:3)

您可以使用

检查虚假值
var n = null;
if (!n) {
    console.log('null');
} else {
    console.log('has value');
}

演示:Fiddle


或检查是否真实如

var n = null;
if (n) { //true if n is truthy
    console.log('has value');
} else {
    console.log('null');
}

演示:Fiddle

答案 2 :(得分:1)

价值是"假的"表示转换为布尔值的结果为false

Boolean(null) // false
Boolean(undefined) // false
// but
Boolean("0") // true

这与与布尔值进行比较非常不同:

null == false // not equal, null == true is not equal either
undefined == false // not equal, undefined == true is not equal either
// but
"0" == true // not equal, however, `"0" == false` is equal

由于您使用strict comparison,情况更简单:如果操作数不是相同的数据类型,则严格相等比较运算符返回falsenull的类型为Null,false的类型为Boolean。

但即使您使用了宽松的比较,abstract equality algorithm也定义了只有nullundefined彼此相等。


根据您要测试的具体内容,您有以下几种选择:

if (!value)         // true for all falsy values

if (value == null)  // true for null and undefined

if (value === null) // true for null

一般来说,你应该总是喜欢严格的比较,因为JS'类型转换规则可能令人惊讶。其中一个例外是将值与null进行比较,因为松散比较也会捕获undefined

答案 3 :(得分:0)

===检查身份 - 完全相同的类型和值。所以null !== false首先是因为它们不是同一类型,因此在使用===时不匹配。

如果您只是想检查任何虚假值,请查看:

if (!n)

如果您想专门检查null,请检查null,如下所示:

if (n === null)