关于js中''、0、false、[]和{}等==的判断逻辑

这个问题也是我在写代码的途中遇到的,觉得有点意思,先附上我当时写的代码,如下:

<!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的。

参考:http://www.cnblogs.com/wait-hua/p/5700342.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值