---
# System prepended metadata

title: 何謂強制轉型、以及如何作到轉換型別？

---

> 如果有記憶吐司就好了...
# 何謂強制轉型、以及如何作到轉換型別？

在JacaScript中強制轉型又可分為明確的和隱含的。
什麼是 **「明確的」強制轉型**
只要是你寫程式碼去做型別轉換的就是明確的強制轉型

那 **「隱含的」強制轉型**又是什麼
隱含的就是你明明沒寫程式碼進行轉型，但偏偏JS又很貼心的幫你自動轉好，那就是隱含的強制轉型囉!

## 明確的強制轉型

### toString()：將型別轉為字串
```jsx=
let a = 123;
a = a.toString();
console.log(a, typeof (a))//123 string

let b = true;
b = b.toString();
console.log(b, typeof (b))//true string
```
### parseInt()：將字串轉為數字
```jsx=
let a = "123";
a = parseInt(a);
console.log(a, typeof (a))／／123 'number'
```

## 隱含的強制轉型
基本上當你不同型別用+號加起來，JavaScript就會很貼心的幫你做型別轉換
例如：
* 字串 ＋ 字串
* 字串 ＋ 數字
* 字串 ＋ 布林值
* 字串 ＋ undefinded
* 字串 + null
* 字串 + NaN
```jsx=
let a = "你" + "好"; // 你好
let b = "1" + 2;//12
let c = "123" + true;//123true
let d = "123" + undefined;//123undefined
let e = "123" + null;//123null
let f = "123" + NaN;//123NaN
```

---
## 總結
* **明確的強制轉型**：就是我們人為去強制轉換型別
* **隱含的強制轉型**：就是JavaScript自動幫你轉型

補充:
因為JavaScript是弱型別語言，所以在執行+法運算時，會優先進行字串連接
而在執行 - 法運算時，如果不是強制轉型，則會優先進行數字運算


參考資料:
[你懂 JavaScript 嗎？#8 強制轉型（Coercion）](https://cythilya.github.io/2018/10/15/coercion/#%E9%82%8A%E7%B7%A3%E6%83%85%E6%B3%81)
[ㄟ問你喔，強制轉型是什麼？轉換型別有規則可循嗎？(布林值、字串篇)](https://karennnnovelty.medium.com/%E3%84%9F%E5%95%8F%E4%BD%A0%E5%96%94-%E5%BC%B7%E5%88%B6%E8%BD%89%E5%9E%8B%E6%98%AF%E4%BB%80%E9%BA%BC-%E8%BD%89%E6%8F%9B%E5%9E%8B%E5%88%A5%E6%9C%89%E8%A6%8F%E5%89%87%E5%8F%AF%E5%BE%AA%E5%97%8E-%E5%B8%83%E6%9E%97%E5%80%BC-%E5%AD%97%E4%B8%B2%E7%AF%87-a9d6d6cc91d)
[何謂強制轉型、以及如何作到轉換型別？](https://hackmd.io/IU6H2Jm5RUGiibVmFjvOEw)