---
# System prepended metadata

title: 資料型態：「靜態／動態語言」和「強／弱型別」

---

資料型態：「靜態／動態語言」和「強／弱型別」
===

JavaScript 是動態型別 + 弱型別。

> - 資料型態：「靜態／動態語言」和「強／弱型別」
> - [靜態型別 vs. 動態型別](https://hackmd.io/xPxtZVqgTIKwsFuRFCXgSg?view)
> - [強型別 vs. 弱型別](https://hackmd.io/DZhvFyzJQF-k1Wx-HT_KfQ?view)
> - [型別安全的脆弱：JavaScript 是動態型別 + 弱型別](https://hackmd.io/YFxGJTpAQRuk4AoKSX7wLQ?view)

「靜態／動態語言」和「強／弱型別」，並非正相關
---

- 靜態／動態語言：變數和型別的綁定方法。
- 強／弱型別：語言型別系統（Type System）對型別檢查的嚴格程度，也就是型別安全的程度。

雖有些趨勢，比如常看到的靜態語言大多是強型別。但本質沒有絕對相關。

常見語言的型別特性
---

![](https://i.imgur.com/2SsInU3.jpg)


| 程式語言 | 靜態語言／動態語言 | 強型別／弱型別 |
| -------- | -------- | -------- |
| Java, C# | 靜 | 強 |
| C/C++ | 靜 | 弱 |
| Python, Ruby | 動 | 強 |
| Perl, PHP, JavaScript |動 | 弱 |

靜態語言又分「顯性型別」和「隱性型別」：
- 靜態顯性型別：Java, C
- 靜態隱性型別：Ocaml, Haskell