--- tags: JS 直播班 - 2022 秋季班 --- # 核心篇第三堂:型別轉換 型別問題很常遇到嗎?實戰大部分會避開,只不過考試很常見 ![](https://i.imgur.com/a5tXCcI.png) ![](https://i.imgur.com/tnjcFqE.png) ![](https://i.imgur.com/pQiQi95.png) ## JavaScript 的型別有哪些 - 原始型別 - 物件型別 與 原始型別 - https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Data_structures - 型別判斷方法 - function - 原始型別的方法來自於… 「原始型別包裹物件」 ## 那個該死的動態型別 - 型別變來變去? - 型別轉換 - 顯性 - 原始型別包裹物件 - 正負運算子 - 隱性轉換 - `+` 運算子 - `+=` 運算子 - 算術運算子 > 規則 ### **顯性轉換(單純)** #### 原始型別及包裹物件 依據原始型別或方法,轉換其結果 1. 包裹物件 2. 原型方法 3. 數字型別的相關方法 #### 正負運算子(數值) 注意:在此所指的是一元 + 運算子 關鍵!一定要先判斷是否為一元運算子 一元運算子所套用的是轉數值的型別方法 #### 邏輯 NOT 運算子(轉型為 boolean) 轉變為相反的布林值 ### 隱性轉換(複雜) #### +運算子 - 規則一:前後運算元如果其中之一為 “字串” 型別,+ 視為字串運算子。 - 規則二:前後運算元如果無法轉型為原始型別(就是指物件型別),+ 視為字串運算子。 - 規則三:上述情況以外,+ 視為算數運算子。 #### 算術運算子 一律套用 Number 轉型 #### 型別轉換注意事項 BigInt 與 Number 型別無法混合計算 ## 型別比較 - 嚴格相等的規則 - 寬鬆相等 - 真值與假值 - 什麼是真假值:[https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy) - 攻略秘笈:[https://dorey.github.io/JavaScript-Equality-Table/](https://dorey.github.io/JavaScript-Equality-Table/) ### 嚴格比較 需注意的例外狀況(如果真的不熟,可以背起來) ```html false console.log(NaN === NaN); console.log(undefined === null); console.log({} === {}); // 關於物件,會在後面的章節介紹 console.log([] === []); console.log(new Number(0) === new Number(0)); true console.log(+0 === -0); ``` ### 寬鬆相等 #### Number, String, Boolean 這三者進行比對時 通通都使用 Number 進行轉型 #### null, undefined 不轉型(都是 false),但 null 與 undefined 相比則是 true #### BigInt(少考) 轉型為「數學值」,沒有 NaN、沒有小數點、沒有最大值 其它概念與 Number 接近 #### 物件與非物件比對 物件與其它型別比較時,會透過 “包裹物件” 將物件轉為相同型別 例外: 1. 布林採用 Number 轉型 2. 陣列轉數值,會先 toString 再套用 Number ## 補充 真假值:https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy 真假值表:https://dorey.github.io/JavaScript-Equality-Table/