js中的不同的數據類型之間的比較轉換規則如下: 1. 對象和布爾值比較 對象和布爾值進行比較時,對象先轉換為字元串,然後再轉換為數字,布爾值直接轉換為數字 2. 對象和字元串比較 對象和字元串進行比較時,對象轉換為字元串,然後兩者進行比較。 3. 對象和數字比較 對象和數字進行比較時,對象先轉換為字 ...
js中的不同的數據類型之間的比較轉換規則如下:
1. 對象和布爾值比較
對象和布爾值進行比較時,對象先轉換為字元串,然後再轉換為數字,布爾值直接轉換為數字
[] == true; //false []轉換為字元串'',然後轉換為數字0,true轉換為數字0,所以為false
2. 對象和字元串比較
對象和字元串進行比較時,對象轉換為字元串,然後兩者進行比較。
[1,2,3] == '1,2,3' // true [1,2,3]轉化為'1,2,3',然後和'1,2,3', so結果為true;
3. 對象和數字比較
對象和數字進行比較時,對象先轉換為字元串,然後轉換為數字,再和數字進行比較。
[1] == 1; // true `對象先轉換為字元串再轉換為數字,二者再比較 [1] => '1' => 1 所以結果為true
4. 字元串和數字比較
字元串和數字進行比較時,字元串轉換成數字,二者再比較。
'1' == 1 // true
5. 字元串和布爾值比較
字元串和布爾值進行比較時,二者全部轉換成數值再比較。
'1' == true; // true
6. 布爾值和數字比較
布爾值和數字進行比較時,布爾轉換為數字,二者比較。
true == 1 // true
許多剛接觸js的童鞋看到這麼多的轉換規則就懵圈了,其實規律很簡單,大家可以記下邊這個圖(是時候展現我高超的繪畫技巧了)
如圖,任意兩種類型比較時,如果不是同一個類型比較的話,則按如圖方式進行相應類型轉換,如對象和布爾比較的話,對象 => 字元串 => 數值 布爾值 => 數值。
另外,我們來看下一些需要"特別照顧"的。
來看一個有趣的題
[] == false;
![] == false;
這兩個的結果都是true,第一個是,對象 => 字元串 => 數值1 false轉換為數字1,這個是true應該沒問題,
第二個前邊多了個!,則直接轉換為布爾值再取反,轉換為布爾值時,空字元串(''),NaN,0,null,undefined這幾個外返回的都是true, 所以! []這個[] => true 取反為false,所以[] == false為true。
還有一些需要記住的,像:
undefined == null //true undefined和null 比較返回true,二者和其他值比較返回false
Number(null) //0
有寫錯的地方,歡迎指正,不勝感激!