---
# System prepended metadata

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

---

# 何謂強制轉型、以及如何作到轉換型別？
 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)