1. 程式人生 > >JavaScript中關係運算 “ == ” 各種資料型別比較的各種情況

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    ②的情況

按照我自己的理解(可能不對)

①如果陣列中沒有值,或者只有一個值時兩邊都會轉為number型別,[]會轉為0,其餘的都轉為本值,[2]轉為2,[0]轉為0,

②如果陣列中有多個值時,會執行toString方法變為字串,這是就是字串與字串比較規則了,兩邊會依次比較Unicode碼,相等就返回true

除了基本型別的還有引用型別的,下次再更