JavaScript語(yǔ)言類型相關(guān)

從類型安全角度來比較,可以分為以下:

強(qiáng)類型與弱類型

強(qiáng)類型:語(yǔ)言層面限制函數(shù)的實(shí)參類型必須與形參類型相同
弱類型:語(yǔ)言層面不會(huì)限制實(shí)參的類型

javascript中允許隱式轉(zhuǎn)換

>'100' - 50
50
>Math.floor(true)
1

從類型檢查角度來比較,可以分為以下:

靜態(tài)類型與動(dòng)態(tài)類型

靜態(tài)類型:一個(gè)變量聲明時(shí),類型就是明確的,并且聲明過后、類型不允許再修改
動(dòng)態(tài)類型:在運(yùn)行階段,才能明確變量的類型,在運(yùn)行過程中類型也會(huì)發(fā)生變化

JavaScript類型系統(tǒng)特征

Javascript是弱類型 且 動(dòng)態(tài)類型,缺失了類型系統(tǒng)的可靠性
以前應(yīng)用比較小,JavaScript也沒有編譯環(huán)節(jié),所以它成為一個(gè)弱類型/動(dòng)態(tài)類型的語(yǔ)言,這也并沒有什么問題。設(shè)置可以說,這也是javascript的一種優(yōu)勢(shì)。

但是現(xiàn)在和以前完全不同了,都是一些非常復(fù)雜的應(yīng)用,開發(fā)周期也越來越長(zhǎng)。在這種情況下,之前JavaScript的優(yōu)勢(shì)(弱類型、動(dòng)態(tài)類型)就變成了短板。

弱類型產(chǎn)生的問題:

// 在語(yǔ)法層面這樣寫沒有問題
// 必須等到運(yùn)行的時(shí)候才發(fā)現(xiàn)問題
const obj = {}
obj.foo()
// 假如這行代碼不是立即執(zhí)行,而是過一段時(shí)間,獲取在其他的方法中。
// 測(cè)試如果沒有執(zhí)行到這個(gè)方法就不會(huì)報(bào)錯(cuò)
// 這樣就留下了隱患
setTimeout(() => {
    obj.for()
}, 10000000)

------------------------------------------------------------------------

// 參數(shù)類型不明確,函數(shù)功能發(fā)生變化
function sum(a, b) {
    return a + b
}
console.log(sum(100, 100))
// => 200
console.log(sum(100, '100'))
// => 100100

------------------------------------------------------------------------
// 對(duì)對(duì)象錯(cuò)誤用法
const obj = {}
obj[true] = 100
// 對(duì)象內(nèi)部會(huì)將屬性名轉(zhuǎn)換為字符串
console.log(obj['true'])
// => 100

強(qiáng)類型的優(yōu)勢(shì)

1.錯(cuò)誤更早暴露,可以在編碼階段提前暴露異常
2.代碼更智能,編碼更準(zhǔn)確。(編輯器時(shí)時(shí)刻刻都知道變量是什么類型)
3.重構(gòu)更牢靠
4.減少不必要的類型判斷(在javasript中,我們需要用代碼去做一些類型判斷)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容