正常的運算已經讓人承受不住,爲何還有隱式轉換?由於js屬於弱類型語言,乍一看,一應俱全,實際上是規則不強硬引發的放蕩!ruby
步入正題,其實js中隱式類型轉換是有規律可循的,先來看一下各種型之間的運算狀況:bash
對象和布爾值進行比較時,對象先轉換爲字符串,而後再轉換爲數字,布爾值直接轉換爲數字code
[] == true; //false []轉換爲字符串'',而後轉換爲數字0,true轉換爲數字1,因此爲false
對象和字符串進行比較時,對象轉換爲字符串,而後二者進行比較對象
[1,2,3] == '1,2,3' // true [1,2,3]轉化爲'1,2,3',而後和'1,2,3', 因此結果爲true;
對象和數字進行比較時,對象先轉換爲字符串,而後轉換爲數字,再和數字進行比較字符串
[1] == 1; // true `對象先轉換爲字符串再轉換爲數字,兩者再比較 [1] => '1' => 1 因此結果爲true
字符串和數字進行比較時,字符串轉換成數字,兩者再比較class
'1' == 1 // true
字符串和布爾值進行比較時,兩者所有轉換成數值再比較技巧
'1' == true; // true
布爾值和數字進行比較時,布爾轉換爲數字,兩者比較im
true == 1 // true
對象和字符串進行比較時,對象轉換爲字符串,而後二者進行比較img
[1,2,3] == '1,2,3' // true [1,2,3]轉化爲'1,2,3',而後和'1,2,3', 因此結果爲true;
其實規律很簡單,你們能夠記下邊這個圖(是時候展示我高超的繪畫技巧了)語言
如圖,任意兩種類型比較時,若是不是同一個類型比較的話,則按如圖方式進行相應類型轉換,如對象和布爾比較的話,對象 => 字符串 => 數值 布爾值 => 數值。
undefined
與null
是特殊狀況,undefined==null
爲true
。