第二天,我們來談談JavaScript(JS)與TypeScript(TS)的比較吧!
動態型別可以隨時轉換變數的型別,
因此若是在開發或在維護管理上不多加注意的話,
很容易發生錯誤。
如下範例
var i = 10 ;
i = "100" ; //success
一開始宣告變數i為數字10,
之後若是轉變為字串"100",在JS上也是可以被允許的喔!
JS為動態型別可以隨時轉換變數的型別
弱型別在執行階段才會發生錯誤,
即使有開發工具的輔助,
也在開發階段很難發現問題所在。
如下範例
var i = 10 + "100" ; //success
在弱型別下不同型別相加是可以被允許的,
因此即使傳入的型別有誤也無法及時發現,
直到執行階段才能再去做找錯除錯的程序。
JS為弱型別在執行階段才會發生錯誤
總和JS的動態型別與弱型別的特性,
很容易造成應用程式難以除錯,
想當然爾,越大型的專案也就越難找出並去除錯誤。
JS的繼承語法特殊,而且不像物件導向程式語言,
若要使用,也是要再做些研究的。
對於已經會JS的人來說,是不需要學習新的程式語言,
因為TS只是將一些新的特性加到JS上而已,
但若是要活用TS的話,學習還是必要的呢!
另外也因此使移植變得容易,
若要將JS檔案移植為TS檔案的話,
只需要將副檔名 .js 變更名稱為 .ts,
一樣是可以運作不會壞掉的喔。
TypeScript顧名思義就是著重在型別(Type)上,以型別為主要優勢。
TS提供型別安全機制,
可以解決上述JS遇到的問題,
因為相對的TS擁有靜態型別與強行別的特性,
不容許轉換變數的型別
number i = 10 ;
i = "100" ;//error
var i = 10 ;
i = "100" ;//error 以推論型別
不容許轉換變數的型別
var i = 10 + "100" ; //error
JS | TS |
---|---|
動態型別 | 靜態型別 |
弱型別 | 強型別 |
因此,更能在開發階段可即早發現問題,
不需要等到執行階段才發現問題,
對於型別上的錯誤可以更有效率的發現與除錯。
在維護上也是會變得更加方便,降低維護成本。
但凡事都是一體兩面,因為多了型別上的管制,在開發上勢必會多出一些開發成本。
目標環境真正執行的是TS撰寫完轉譯成的JS,
因此,即使TS撰寫錯誤,也會正常轉譯成JS,
而目標環境不會直接壞掉,
因為JS才是真正在運作的程式碼。
最後,希望大家對於兩者的優缺差異已經大致了解了,
總而言之,型別就是TypeScript(TS)最大的重點!(想學習的TS的朋友抓好了)