学的还没有那么深,有错误或者我的理解有问题的话还请告诉我,谢谢
1、一般情况下,将两边尽可能都转为number类型数据,再进行比较,而不是转为Boolean型
console.log(true==2); // false
如果两边都转为Boolean型再比较,那么就是true==true,就不会返回false,所以证明不是两边转为Boolean型,再比较!!应该是两边都转为number类型,1==2,返回false
console.log(true==1); // true
2、在数字与数字相比中,前边是不能随便带0的,因为0在程序代表的是八进制的数字
console.log(012==12); //false
console.log(012==10); // true
console.log(099==99); //true 这种情况是因为八进制中不可能出现9,所以看成一个十进制
console.log(09==9); //true 同上
3、underfined、null、0、NaN、"" 这五个在转为布尔值时都会变为false,那么在“==”中的表现如何呢
①underfined和null
undefined和null与任何有意义的值比较返回的都是false,null与undefined在与其他数相等运算时不进行类型转换,但是null==undefined
console.log(null==undefined); //true
console.log(null===undefined); //false ===: 全等:不仅比较值是否相等,数据类型要相同
console.log(null==0); // false
console.log(undefined==1); //false
console.log(null==false); // false
console.log(undefined==""); // false
②NaN
NaN: NaN和任何数据做大小或等于比较永远返回false(包括NaN)
NaN和任何数据做*不等于*比较,永远返回true(包括NaN)
console.log(NaN==NaN); // false
console.log(NaN!=NaN); // true
console.log(NaN==0); // false
console.log(NaN!=0); // true
console.log(NaN=="dsdd"); // false 字符串"dsdd"转为数字为NaN,但是NaN!=NaN
③ ""会转为数字0
console.log(""==0); // true
4、两字符串做比较:字符串与字符串相比不会转为number类型,依次比较每一位字符的unicode编号,只要有一位字符不相同,就不相等,都相同就相同
例①console.log("NaN"=="NaN"); // true 因为NaN被“”,所以此处两边都是字符串
例②console.log("qwe"=="qwe"); //true 不是转为number类型再比较,因为如果转为number类型的话,就是NaN==NaN,那么返回的应该是false
例③
console.log("099"=="99"); //false
console.log("099"==99); //true
console.log(099==99); // true
这个就更能说明问题了,如果都转为number类型的话,那么099==99 应该为true
5、字符串与其他类型相比遵循大规则,就是都转为number类型
console.log("qwe"==true); // false NaN==1所以false
console.log(""==false); // true 0==0 所以true
console.log("qwe"==false); // false NaN==0 所以false
console.log("12"==12); //true
console.log("010"==10); // true
6、数组与其他数据类型做比较
console.log([]==false); //true
console.log([2]==2); //true
console.log([2]==1); //false
console.log([]==0); //true
console.log([0]==0); // true
console.log([0,1]=="0,1"); // true ②的情况
console.log([0,1]==01); //false ②的情况
console.log([0,1]=="01"); //false ②的情况
console.log(["a","b"]=="a,b"); //true ②的情况
如果一个引用类型与一个原始类型比较,那么引用类型会执行tostring或者valueof方法转为原始类型
数组执行tostring()方法变成字符串,变成字符串的规则是值与值之间用 “,” 连接起来,[ ]空数组里边没有值会转为“ ”
而“ ”会转为数字0,数组中有一个值也是转为字符串,再转为数字。
如果数组中有多个值时,也会执行toString方法变为字符串,例如“1,2,3” ,这是就是字符串与字符串比较规则了,两边会依次比较Unicode码,相等就返回true
我是写完这篇文章才看到这位大神的文章的,讲的太清楚了,希望大家可以看一看,就会有更深的了解了