前端面试之你不知道的==操作符,!=操作符

作者: 小熊猫猫 | 来源:发表于2018-02-22 14:20 被阅读339次

           年后第一天开工,在刷面试题的时候看到了这么一道题,null == 0居然是false,之前的常识不是,null、undefined、0、-0、NaN、‘' 这几个值会遇到==操作符会转换成false吗, 然后百度了一下了解了null在==比较不进行类型转换,然后在控制台随便尝试的时候发现null == undefined居然是true,不是不转换吗,这这这真是毁三观啊,在我百思不得其解的时候我翻开了那本神奇的红皮书,泽拉斯大神竟然早就把这些写在书里了,试问我也是看过几遍的人,但是每次都会把前三章选择性的直接忽略,以后真的要戒骄戒躁踏踏实实的学好基础知识啊,下面我就详细的分析一下这两个操作符的使用规则:

          1.如果等号两边有布尔值,先将布尔值转成数字(true转成1,false转成0),在进行比较。

          例:false == 0;会将false先转换为数字0,再与0作比较

                  true == 1;会将true先转换为数字1,再与1作比较

                  因此 false == 1;//false    true==10;//false

    2.如果一个是字符串一个是数值,现将字符串转成数值在进行比较。

            例:1=='1';//true     

                    2=='2';//true 

                    1=='2';//false

                    ''==0;//true 这里需要注意的是空字符串会直接转成数字0

                    //结合第一条和第二条就能得出:false =='0'//true

    3.如果有对象,先调用对象的valueof()方法,再作为基本类型进行比较。

    4.null和undefined是相等的。undefined==null //这一条就是我上面所困惑的问题

    5.如果比较双方有null和undefined,不能将其转换为其他值。

                这条也就表明除了他们俩自身相比较,其他的任何值与undefined,null做==比较返回值都是false,比如:

                null == false//false    undefined == 0//false 

    6.如果有NaN,相等操作符返回false,不相等操作符返回true,如果两个值都为NaN,返回false,也就是说NaN不等于本身。

    7.如果两个操作数都为对象,比较的是他们是否指向同一个对象。对象比较的是他们的引用而不是值。

    相关文章

      网友评论

        本文标题:前端面试之你不知道的==操作符,!=操作符

        本文链接:https://www.haomeiwen.com/subject/tmfztftx.html