这个问题也是我在写代码的途中遇到的,觉得有点意思,先附上我当时写的代码,如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
</body>
<script type="text/javascript" src="jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function () {
check(0);
});
function check(a) {
if (a==""){
console.log("校验不通过");
return
}
console.log("校验通过");
}
</script>
</html>
在我的预想中除非a的值是空串,否则结果应该是通过的,但上面的运行结果却是不通过,我还是太young了,所以当时我只好把check(0)换成了check(‘0’),然后运行通过了,后来我才了解到在js中进行==判断的话认真你就输了,要么你使用===,要么你必须是同类型来比较,check(‘0’)就是如此,然后我又做了一些测试,
测试代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
</body>
<script type="text/javascript" src="jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function () {
check();
});
function check() {
console.log("0 == '' is " + (0 == ""));
console.log("false == '' is " + (false == ""));
console.log("[] == '' is " + ([] == ""));
console.log("{} == '' is " + ({} == ""));
}
</script>
</html>
测试运行结果如下:
0 == '' is true
false == '' is true
[] == '' is true
{} == '' is false
what are you 弄啥啊?从运行结果我们首先可以知道0和”还有false相等我们是可以接受的,因为他们在js的逻辑判断中本来就是false的,而{}不等于”也是可以理解的,因为{}在js的逻辑判断中是为true的,但是[]等于”是什么鬼,因为[]的逻辑判断是true,而”是false,他俩居然相等,所以this is a problem。
答案揭晓,其实在进行数组直接与true和false的布尔类型比较时,默认是将数组和布尔类型都转化为了Number类型进行比较,空数组转化为Number类型时为0,所以[]==”没毛病……
but,请注意一点,null和undefined和”的比较结果也都是false的。