JavaScript 在進行運算時,經常會自動將變數轉型。這一節整理常見隱性轉型的規則
規則一:前後運算元如果其中之一為 “字串” 型別,+ 視為字串運算子。
規則二:前後運算元如果無法轉型為原始型別(就是指物件型別),+ 視為字串運算子
規則三:上述情況以外,+ 視為算數運算子
一律套用 Number 轉型,ex:true會被轉型成1
陣列轉字串再轉數字
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
未捕獲的類型錯誤:無法混合 BigInt 和其他類型,請使用明確轉換
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
未捕獲的類型錯誤:無法混合 BigInt 和其他類型,請使用明確轉換
JavaScript 不允許隱式地將 Symbol
類型的值轉換為數字或字串進行加法運算
Uncaught TypeError: Cannot convert a Symbol value to a number
Uncaught TypeError: Cannot convert a Symbol value to a string
Number, String, Boolean 這三者進行比對時,通通都使用 Number 進行轉型
Null 和 Undefined 特殊比較規則
Null不轉型(都是 false),但 null 與 undefined 相比則是 true
轉型為「數學值」,沒有 NaN、沒有小數點、沒有最大值
物件與其它型別比較時,會透過 “包裹物件” 將物件轉為相同型別
例外:
toString()
再套用 Number()
Symbol比較,類似於物件是比對記憶體位址,所以此題會是false
值的型別需完全一樣
例外狀況:
物件、陣列比對的是記憶體位址
真假值:https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy