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
除了基本型別的還有引用型別的,下次再更