==与===的区别(JS)

两者都是判断等式两边是否相等,最大的区别就是==会进行类型的转换之后再判断两者是否相等,而===不会进行数据类型的转换,先判断两边的数据类型是否相等,如果数据类型相等的话才会进行接下来的判断,再进行等式两边值得判断,可以理解为只有等式两边是全等(数据类型相同,值相同)的时候结果才会是true,否则全为false。

==判断等式两边是否相等的情况:

(1)null、undefined和不同类型比较,都是false(null和undefined结果为true)

(2)NaN和任何数据进行比较,都是false(包括NaN和NaN相比较也为false)

(3)布尔值是转换为数字1或0再和其他数据进行比较

             拓展:   不同数据转换成布尔值的结果:              

        console.log(Boolean(''));       //false
        console.log(Boolean({}));       //true
        console.log(Boolean([]));       //true
        console.log(Boolean(null));     //false
        console.log(Boolean(undefined)); //false
        console.log(Boolean(NaN));      //false
        console.log(Boolean(Object));   //true

(4)数字和其他简单数据类型进行比较时,会尝试将其他数据类型转换成数值型再进行比较

                **其他数据类型默认转数字使用的是Number()  

        console.log(""==false);     //true
        console.log(parseInt(""));   //NaN
        console.log(Number(""));   //0
        console.log(""==0);         //true

(5)对象和其他简单数据类型进行比较的时候,会尝试使用对象的valueOf()和toString()方法将对象转换为原始值进行比较:

        ①对象.toString()返回值只有[ object Object ]                

        let obj = {
            name:'leon',
            age:18
        };
        console.log(obj.toString());    //[object Object]
        console.log(obj.valueOf());     //{name: 'leon', age: 18}
        let obj = {};
        console.log(obj.toString());    //[object Object]
        console.log(obj.valueOf());     //{}

        ②数组  [ ].toString()返回值是空  其他数组.toString()返回值是字符 ,一个成员一个字符逗号分隔   

        let arr1=[1,2,3];
        console.log(arr1.toString());    //1,2,3
        console.log(arr1.valueOf());     //[1, 2, 3]

        let arr=[];       
        console.log(arr.toString());    //空
        console.log(arr.valueOf());     //[]

        ③其他的对象function  reg  返回字符串        

        function fn(){
            console.log("你是最棒的!");
        }
        console.log(fn.toString());    
        console.log(fn.valueOf());   
        
        let reg = /^[^_$]\w{5,}@(163|126|qq|sina)\.(com|cn|net)$/;
        console.log(reg.toString());    
        console.log(reg.valueOf());  

运行结果截图:

(6)两者同为引用类型时,必须是指向同一个引用地址才相等,否则不相等

(7)-0 == +0   结果为:true

全等比较(===)不转换数据类型,数据类型和内容必须完全一致才是相等

全等比较(===)两边是否相等的情况:

(1)类型不同,一定不相等

(2)两个同为数值,并且相等,则相等;若其中一个为NaN,一定不相等

(3)两个都为字符串,每个位置的字符都一样,则相等

(4)两个同为true,或是false,则相等

(5)两个值都引用同一个对象或函数,则相等,否则不相等(引用类型地址空间可能不一样)

(6)两个值都为null,或undefined,则相等

(7*)两者同为引用类型时,必须是指向同一个引用地址才相等,否则不相等(5的补充)

(8)-0 === +0   结果为:true

Guess you like

Origin blog.csdn.net/dream_start_at_2017/article/details/121875660