js中的隱式轉換

js中的不一樣的數據類型之間的比較轉換規則以下:code

1. 對象和布爾值比較

對象和布爾值進行比較時,對象先轉換爲字符串,而後再轉換爲數字,布爾值直接轉換爲數字

[] == true;  //false  []轉換爲字符串'',而後轉換爲數字0,true轉換爲數字1,因此爲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的童鞋看到這麼多的轉換規則就懵圈了,其實規律很簡單,你們能夠記下邊這個圖(是時候展示我高超的繪畫技巧了)
數據轉換對象

如圖,任意兩種類型比較時,若是不是同一個類型比較的話,則按如圖方式進行相應類型轉換,如對象和布爾比較的話,對象 => 字符串 => 數值 布爾值 => 數值。
另外,咱們來看下一些須要"特別照顧"的。blog

來看一個有趣的題字符串

[] == false;
![] == false;

這兩個的結果都是true,第一個是,對象 => 字符串 => 數值0 false轉換爲數字0,這個是true應該沒問題,
第二個前邊多了個!,則直接轉換爲布爾值再取反,轉換爲布爾值時,空字符串(''),NaN,0,null,undefined這幾個外返回的都是true, 因此! []這個[] => true 取反爲false,因此[] == false爲true。技巧

還有一些須要記住的,像:

undefined == null //true undefined和null 比較返回true,兩者和其餘值比較返回false
Number(null) //0

有寫錯的地方,歡迎指正,不勝感激!數據類型

相關文章
相關標籤/搜索