js中== ===的区别
js是弱类型语言,这两个符号都是判断值是否相等的操作符,== 与 === ,两者相比,== 会做一定的类型转换;而 === 不做类型转换,所接受的相等条件更加严格。
等号==
比较之前先进行隐式转换,类型相同与否无关,若类型一样,则和===比较一样进行严格比较。若不一样:
若是undefined和null(注意:undefined和null属于两种基本数据类型),返回true。
若一个是Number类型,一个是String类型,则把String类型转换成Number类型比较。如:"1" == 1;
若有一个为Boolean类型,则把Boolean类型的值转换成Number类型的值来比较,Boolean(2) == 1;Boolean(2) == "1"; //ture
若一个是Number类型或者String类型,一个是Object类型,先把Object类型转换成基本数据类型,再进行比较。
注意:a == c; b==c; a == b?不一定,比如:
1 var str1 = new String("Hello"); 2 3 var str2 = new String("Hello"); 4 str1 == "Hello"; 5 str2 == "Hello"; 6 alert(str1 == str2)
恒等号===
首先判断两个值的类型是否相等,如果不相等,直接返回false:"1" === 1;
然后,如果类型相同:若是undefined和null,返回true。
若是Number类型,(1)一般的数值相等返回true,(2)如果一个是NaN,则返回false,两个NaN返回true,(3)0 -0 +0返回true。
若是String类型,完全相等时返回true。
若是Boolean类型,相等时返回true。
若两个变量引用的对象相同,返回true。
1 function aa(name){ 2 this.name = name; 3 } 4 var a1 = new aa("wo"); 5 var a2 = new aa("wo"); 6 var b = a1; 7 var c = a1; 8 alert(c === b); //返回true 9 10 alert(a1 == a2); //返回false 11 alert(a1 === a2); //返回false 12 alert(a1.name == a2.name); //返回false 13 alert(a1.name === a2.name); //返回false