今天编写前端时遇到一个奇葩问题,这个问题可能以前遇到过,但是没有记录下来,今天特此记录,避免以后继续采坑。
问题
在js中对一个变量进行空值判断,当变量为0时,返回结果为true:
var test = 0;
if (test == null || test == "") {
alert("test is null");
}else {
alert("test is not null");
}
原因
这是因为0与 "" 转换成布尔型都是false的。
解决办法
var test = 0;
if (test == null || test.toString() == "") {
alert("test is null");
}else {
alert("test is not null");
}
或者多加一个"=":
var test = 0;
if (test == null || test === "") {
alert("test is null");
}else {
alert("test is not null");
}
"=="和"==="的区别
使用“==”时,如果两边类型不同,js引擎会把它们转换成相同类型然后在进行比较,而“===”则不会进行类型转换,因此当两边不是属于同一个类型,肯定不相等。