JavaScript中判断两个值是否相等(各种情况)

学的还没有那么深,有错误或者我的理解有问题的话还请告诉我,谢谢

 

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

 

我是写完这篇文章才看到这位大神的文章的,讲的太清楚了,希望大家可以看一看,就会有更深的了解了

 

http://www.admin10000.com/document/9242.html

猜你喜欢

转载自blog.csdn.net/shilipeng666/article/details/84176897
今日推荐