- ==,兩邊值類型不同的時候,要先進行類型轉換,再比較
- ===,不做類型轉換,類型不同的一定不等
== 類型轉換過程:
- 如果類型不同,進行類型轉換
- 判斷比較的是否是 null 和 undefined, 如果是, 返回 true
- 判斷兩者類型是否爲 (string 或 boolean) 和 number, 如果是, 將字符串和布爾轉換成 number
- 判斷其中一方是否爲 object 且另一方爲 string、number 或者 symbol, 如果是, 將 object 轉爲原始類型再進行判斷
經典面試題:[] == ![] 爲什麼是true
轉化步驟:
- !運算符優先級最高,![]會被轉爲爲false,因此表達式變成了:[] == false
- 根據上面第(3)條規則,如果有一方是boolean,就把boolean轉爲number,因此表達式變成了:[] == 0
- 根據上面第(4)條規則,把數組轉爲原始類型,調用數組的toString()方法,[]轉爲空字符串,因此表達式變成了:'' == 0
- 根據上面第(3)條規則,兩邊數據類型爲string和number,把空字符串轉爲0,因此表達式變成了:0 == 0
- 兩邊數據類型相同,0==0爲true