== 和 的區別 使用雙等號進行相等判斷時,如果兩邊的類型不一致,則會進行強制類型轉化後再進行比較; 使用三等號進行相等判斷時,如果兩邊的類型不一致時,不會做強制類型準換,直接返回 false; ==的判斷流程 首先判斷兩者類型是否相同,相同的話就比較兩者的大小;類型不相同的話,就會進行類型轉換。 ...
== 和 ===的區別
使用雙等號進行相等判斷時,如果兩邊的類型不一致,則會進行強制類型轉化後再進行比較;
使用三等號進行相等判斷時,如果兩邊的類型不一致時,不會做強制類型準換,直接返回 false;
==的判斷流程
- 首先判斷兩者類型是否相同,相同的話就比較兩者的大小;類型不相同的話,就會進行類型轉換。
- 判斷是否在對比 null 和 undefined,是的話就會返回 true。
- 判斷兩者類型是否為 String 和 Number,是的話就會將字元串轉換為 number。
- 判斷其中一方是否為 Boolean,是的話就會把 Boolean 轉為 Number 再進行判斷。
- 判斷其中一方是否為 Object 且另一方為 String、Number 或者 Symbol,是的話就會把 Object 轉為原始類型再進行判斷。
強制類型轉換規則
string轉number
String 類型的值轉換如同使用 Number() 函數進行轉換,如果包含非數字值則轉換為 NaN,空字元串為 0。
- 如果字元串包含數值字元,包括數值字元前面帶加、減號的情況,則轉換為一個十進位數值。如果數值前有前置0,會忽略。
- 如果字元串包含有效的浮點值格式,則會轉換為相應的浮點值(同樣,忽略前面的零)。
- 如果字元串包含有效的十六進位格式如"0xf",則會轉換為與該十六進位值對應的十進位整數值。
- 如果是空字元串(不包含字元),則返回0。
- 如果字元串包含除上述情況之外的其他字元,則返回NaN。
Boolean轉Number
true轉1,false轉0。其中Boolean為false的值有null、undefined、false、+0、-0、NaN、空字元串
對象轉基本類型
對象在轉換基本類型時,會調用 valueOf 和 toString。如果傾向於將對象轉換為Number,則調用valueOf();傾向於轉換為String類型,則調用toString()。
- 普通對象:valueOf方法返回對象本身,而toString方法返回"[object ObjectName]";
- Array:valueOf方法放回數組本身。而toString方法將 Array 的每個元素轉換為字元串,並將它們依次連接起來,兩個元素之間用英文逗號作為分隔符進行拼接
- Date:valueOf方法放回時間戳。而toString方法返回日期的文本表示。
- Function:valueOf方法返回方法本身。而toString方法返回"function functionname() { [native code] }"。