# 何謂強制轉型、以及如何作到轉換型別? JavaScript中的資料類別是動態的,如果沒有給出明確的類別 JavaScript會自動判斷該值要轉換的類型,這個動作就叫做強制轉型。 > 檢視數據的類型可使用typeof()來進行判斷 強制轉型分成兩種 * 顯性轉型 : 可以在程式碼看到轉換過程 * 隱性轉型 : 由JavaScript自行判斷而轉換 ## 顯性轉型 這種方式就是在編寫程式時自行將值轉換成想要的類型來利用。 ### 轉換成字符串 1. .toString() 2. String() 3. 數字 + 字符串 ```javascript= // .toString轉換 let z = 16; console.log(typeof z, z); //number 16 z = z.toString(); console.log(typeof z, z); //string "16" // String()轉換 let x = 29; console.log(typeof x, x); //number 29 x = String(x); console.log(typeof x, x); //string "29" //數字 + 字符串 let c = 3; console.log(typeof c, c); //number 3 c = c + "4"; console.log(typeof c, c); //string "34" //也可以 數字 + 空字符串 let v = 6; console.log(typeof v, v); //number 6 v = v + ""; console.log(typeof v, v); //string "6" // undefined/null 也可利用String()轉換 let b = undefined; console.log(typeof b, b); //undefined undefined b = String(b); console.log(typeof b, b); ``` ### 轉換成數字 1. Number() 將字串轉換成數字,可整數也可小數 2. parseInt() 將字串以無條件捨去的方式轉換成一個整數 3. parseFloat() 將字串轉換成包含小數點的數字 4. 通過 + 或 - 轉換,會改變正負值 :star:需注意: ```javascript= // Number() let n = "1.1"; console.log(typeof n, n); //string "1.1" n = Number(n) console.log(typeof n, n); //number 1.1 // parseInt() let m = "2.2"; console.log(typeof m, m); //string "2.2" m = parseInt(m) console.log(typeof m, m); //number 2 //parseFloat let a = "3.3"; console.log(typeof a, a); //string "3.3" a = parseFloat(a) console.log(typeof a, a); //number 3.3 // + / - let s = "4.4"; console.log(typeof s, s); //string "4.4" s = -s; console.log(typeof s, s); //number -4.4 ``` :notebook: 小筆記 : > 空字符串/false/null轉換為0 > 字符串不僅僅是數字/nudefined 轉換為NaN ### 轉換成布林值 1. Boolean() 2. 加上! ```javascript= // 數字 let d = 999; console.log(typeof d, d); // number 999 d = Boolean(d); console.log(typeof d, d); //boolean true // 字符串 let f = "嗨"; console.log(typeof f, f); // string 嗨 f = Boolean(f); console.log(typeof f, f); // boolean true // 若為空字符串 let g = ""; console.log(typeof g, g); // string g = Boolean(g); console.log(typeof g, g); // boolean false ``` :notebook:小筆記 > 字符串只要有內容,轉換都是true > 數字中只有0是false,其他都是true > undefined/null轉換都是false ## 隱性轉型 ### 字符串與數值 ```javascript= // 數字與字符串相加時JS會很貼心的將數值轉成String,並且串接 let h = "1"; let j = 2; let k = [3,4]; let l = [5,6]; let r = "one" console.log(h+j) //"12" // 數字與字符串相加時JS會很貼心的將數值轉成字符串,並且串接 console.log(j*r) // NaN //字符串中非數值與數值相乘會顯示NaN console.log(h*j) //但是相乘時卻是把字符串轉換成數值在相乘 console.log(k+l) //"3,45,6" // 陣列使用+號不會陣列串接,而是會先個別先用toString()轉換成"3,4"和"5,6"後串接 ``` ### 布林值 ```javascript= //布林值與數值相加減會自動轉換成Number 1跟0 let q = 5; let w = true; // 1 let e = false; // 0 console.log(q+w); // 6 console.log(q-e); // 5 ``` ## 參考資料 [[ 技術筆記 ] JavaScript|何謂強制轉型(coercion)以及如何作到轉換型別](https://medium.com/@sunnyhuang.sc/%E6%8A%80%E8%A1%93%E7%AD%86%E8%A8%98-javascript-%E4%BD%95%E8%AC%82%E5%BC%B7%E5%88%B6%E8%BD%89%E5%9E%8B-coercion-%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E4%BD%9C%E5%88%B0%E8%BD%89%E6%8F%9B%E5%9E%8B%E5%88%A5-d7e39e30083) [你懂 JavaScript 嗎?#8 強制轉型(Coercion)](https://ithelp.ithome.com.tw/articles/10201512)
{"metaMigratedAt":"2023-06-16T12:50:48.590Z","metaMigratedFrom":"Content","title":"何謂強制轉型、以及如何作到轉換型別?","breaks":true,"contributors":"[{\"id\":\"663fae2d-2bb5-4437-90b7-96f11a50e120\",\"add\":3112,\"del\":82}]"}
Expand menu