[js] if()、==、===

//这里有个梗,据说if()里面用的也是==,==在使用vulueOf,toString的情况会出现异常,暂时没遇到过,遇到了再加上

if()

并不会改变数据类型,也不会直接执行()里的函数本身

number  NaN  不进入

number  0  不进入

object  null  不进入

boolean  false  不进入

undefined  undefined不进入

string  (空字符串'')不进入

 对这些 ! 取反后都为 true ,且不会改变原数据

            console.log(!(-120));//false
            console.log(!120);//false
            console.log(!0);//true

            //该写个方法测的,好蠢
            var a = '变量';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass1')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变
            var a = ['变量'];
            console.log(a);
            console.log(a instanceof Array); //true
            if (a) {
                console.warn('pass2')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变
            var a = NaN; //不进入
            console.log(typeof a); //number
            if (a) {
                console.warn('pass3')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = 2;
            console.log(typeof a); //number
            if (a) {
                console.warn('pass4')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = 1;
            console.log(typeof a); //number
            if (a) {
                console.warn('pass5')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = 0; //不进入
            console.log(typeof a); //number
            if (a) {
                console.warn('pass6')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变            
            var a = '0';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass7')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = '1';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass8')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = 'null';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass9')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = null; //不进入
            console.log(typeof a); //object
            if (a) {
                console.warn('pass10')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变            
            var a = true;
            console.log(typeof a); //boolean
            if (a) {
                console.warn('pass11')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = false; //不进入
            console.log(typeof a); //boolean
            if (a) {
                console.warn('pass12')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = 'true';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass13')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = 'false';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass14')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变            
            var a = 'undefined';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass15')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变            
            var a = undefined; //不进入
            console.log(typeof a); //undefined
            if (a) {
                console.warn('pass16')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = [];
            console.log(typeof a); //object
            if (a) {
                console.warn('pass17')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = {};
            console.log(typeof a); //object
            if (a) {
                console.warn('pass18')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = {
                有: '朋自远方来'
            };
            console.log(typeof a); //object
            if (a) {
                console.warn('pass19')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变    
            var a = ''; //不进入
            console.log(typeof a); //string
            if (a) {
                console.warn('pass20')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变            
            var a = '  ';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass21')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变                
            var a = function() {};
            console.log(typeof a); //function
            if (a) {
                console.warn('pass22')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变            
            var a = function() {
                console.warn('会被执行吗?')
            }; //并不会
            console.log(typeof a); //function
            if (a) {
                console.warn('pass23')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = function() {
                return false;
            }; //并不会执行,与return 的值无关
            console.log(typeof a); //function
            if (a) {
                console.warn('pass24')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = 'error';
            console.log(typeof a); //string
            if (a) {
                console.warn('pass25')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变        
            var a = (function() {
                return false;
            })(); //本身先执行了,返回false,不进入
            console.log(typeof a); //boolean
            if (a) {
                console.warn('pass26')
            } else {
                console.error((typeof a) + a + '不进入')
            }
            console.log(a); //不变
            console.log(typeof a); //不变
            function testIf(a) {
                console.log(typeof a, a);
                if (!a) {
                    console.log('yes')
                } else {
                    console.error('no')
                }
                console.warn(!a);
                console.warn(typeof a, a);
            }
            testIf(NaN);
            testIf(0);
            testIf(null);
            testIf(false);
            testIf(undefined);
            testIf('');
            testIf('0'); //no
            testIf('1'); //no
            testIf('null'); //no
            testIf('false'); //no
            testIf('undefined'); //no

 

== 与 ===

===是不会改变数据和数据类型的,==貌似有特定情况会,还没遇到过

两个相同的数组,或者对象,是不相等的!

            function abc(a, b) {
                console.log(typeof a, a, typeof b, b);
                console.log(a == b);
                console.log(typeof a, a, typeof b, b);
                console.info(a === b);
            }
            abc(0, false);
            abc("", false);
            abc("", 0);
            abc("0", 0);
            abc("17", 17);
            abc([1, 2], "1,2");
            abc(new String("foo"), "foo");
            abc(null, undefined);

 

 

# `==`的比较规则

先比 ===

然后是 null 和 undefined 的特殊情况

然后如果是 Number 和 String 比,把 String 转化成 Number 再重新比

然后如果有一个是 Boolean,先把 Boolean 转化成 Number 再重新比

如果是 String/Number/Symbol 和 Object 比,先把 Object 转化为 Primitive 再重新比

最后都不行就返回 False

转载于:https://www.cnblogs.com/qingmingsang/articles/5223985.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值