javascript - 为什么if判断规则和==判断规则不一样?
PHP中文网
PHP中文网 2017-04-11 09:08:15
[JavaScript讨论组]

如下面的代码:

        var a = ""; // false
        var b = " "; // false
        var c = []; // false
        var d = [0]; // false
        var e = [1]; // true
        var f = {}; // false
        var g = {a:0}; // false
        var h = {b:1}; // false
        var j; // false
        var k = null; // false
        if (a) {console.log('a')}
        if (b) {console.log('b')} // 成功打印
        if (c) {console.log('c')} // 成功打印
        if (d) {console.log('d')} // 成功打印
        if (e) {console.log('e')} // 成功打印
        if (f) {console.log('f')} // 成功打印
        if (g) {console.log('g')} // 成功打印
        if (h) {console.log('h')} // 成功打印
        if (j) {console.log('j')}
        if (k) {console.log('k')}
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
阿神

调用if会调用这个ToBoolean,==并不是呀

怪我咯

因为规则就是不一样啊。
==会转化为数字进行比较
[]==true比的其实是0==1;
if则是强行转化为布尔值
[]是个数组,确切存在,所以就是true,可以这么理解。
具体的规则,我也记不大清,你可以去查一下。

黄舟

if判断的时候,如果传入的不是boolean类型的值(或表达式),js引擎会把你的变量转成boolean类型的变量。比如,if(0)判断是否定的,是因为Boolean(0)的值为false,而if(1),if(2),if(不等于0和NaN的数)都等价于if(true)是应为Boolean(不等于0和NaN)的值为true。但是==操作符则不同,它的规则比较复杂,这里举个简单的例子。if(true==1)会被判定为真,但是if(true==2)就会被判定为假。因为对于==操作符,true和一个Number类型的值比较的话,它只能等于1,而Boolean(a)中只要a不为零即为真。关于==操作符,推荐一篇文章:一张图彻底搞懂JavaScript的==运算,希望能帮到你。

巴扎黑
    var a = ""; // 里面没有东西,所以if()判断为假
    var b = " "; // 有东西,空格
    var c = []; // 有东西,空的[]
    var d = [0]; // 有东西,
    var e = [1]; // 有东西
    var f = {}; // 有东西
    var g = {a:0}; // 有东西
    var h = {b:1}; // 有东西
    var j; // 没赋值,默认if()判断为假
    var k = null; // 错误当然是假
高洛峰

==判断会先把各种类型转换成数字类型 而if则会把各种类型转换成布尔值 下图是各类型与数字和布尔值的关系

巴扎黑

除了NAN, false, "", null, undefined, 其余都是true

迷茫

什么意思,说详细点

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号