強型別(strongly typed) v.s 弱型別(weakly typed)
強型別在檢查型別時較為嚴謹
且不允許隱性型別轉換
也就是說當型別指定好後編譯器就不會亂幫你自動轉型
所以當你拿string型別的變數和int型別的變數比較是否相等時
編譯器就會直接報錯
但此種情況若用在弱型別的話(像是"520"==520)
以 JavaScript來舉例的話就會得到True
這樣結果的好處是不用再手動轉型就可以做比較
可是當型別不那麼明確時
很可能會在某些情況應該要顯示錯誤訊息卻編譯成功了
讓bug更難找到
而使用強型別的語言常見的有:C#,Java,Python
使用弱型別的語言常見的有:C,C++,JavaScript
其中最常被拿來討論的JavaScript則算是超級弱型別
因為對於型別的檢核非常鬆
因此很多奇怪的語法也可以通過編譯
而經常產生了非預期的結果
不過在這麼混亂的情況下就真的沒有辦法做到強型別的嚴謹比較嗎?
其實是可以的
像是"==="這個運算子就是不會擅自做隱性型別轉換再比較是否相等
所以可以根據不同的情況來使用不同的運算子
(如果允許不同型別間的比較就用"=="即可)
再來比較容易誤會的語言是Python
因為可以不需要宣告型別就指派值給變數
感覺上不那麼嚴謹
但當你定義好變數後其型別編譯器就不會任意做轉換
因此可以先檢視看看你現在所使用的語言是屬於哪種
這樣如果型別上出了問題也比較能夠知道是可能是語言的特性所造成的
以及該怎麼去處理