博主作品:《Java項(xiàng)目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分離項(xiàng)目,可以在左邊的分類(lèi)專(zhuān)欄找到更多項(xiàng)目。《Uniapp項(xiàng)目案例》有幾個(gè)有uniapp教程,企業(yè)實(shí)戰(zhàn)開(kāi)發(fā)?!段⒎?wù)實(shí)戰(zhàn)》專(zhuān)欄是本人的實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié),《Spring家族及微服務(wù)系列》專(zhuān)注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源碼解讀、熱門(mén)面試題、架構(gòu)設(shè)計(jì)等。除此之外還有不少文章等你來(lái)細(xì)細(xì)品味,更多驚喜等著你哦
??開(kāi)源Vue3項(xiàng)目免費(fèi)哦:點(diǎn)擊這里克隆或者下載?,點(diǎn)擊star(star越多維護(hù)動(dòng)力越多) ? ??
目錄
一、什么是javascript
二、TypeScript:靜態(tài)類(lèi)型檢查器
1、類(lèi)型化的 JavaScript 超集
1.1、句法
1.2、類(lèi)型
1.3、運(yùn)行時(shí)行為
1.4、擦除類(lèi)型
2、學(xué)習(xí) JavaScript 還是?TypeScript
一、什么是javascript
? ? JavaScript(也稱(chēng)為 ECMAScript)最初是一種用于瀏覽器的簡(jiǎn)單腳本語(yǔ)言。在它被發(fā)明的時(shí)候,它被期望用于嵌入網(wǎng)頁(yè)的短代碼片段——編寫(xiě)超過(guò)幾十行的代碼有點(diǎn)不尋常。因此,早期的網(wǎng)絡(luò)瀏覽器執(zhí)行此類(lèi)代碼的速度非常慢。不過(guò),隨著時(shí)間的推移,JS 變得越來(lái)越流行,Web 開(kāi)發(fā)人員開(kāi)始使用它來(lái)創(chuàng)建交互式體驗(yàn)。
? ? Web 瀏覽器開(kāi)發(fā)人員通過(guò)優(yōu)化他們的執(zhí)行引擎(動(dòng)態(tài)編譯)和擴(kuò)展它的功能(添加 API)來(lái)應(yīng)對(duì) JS 使用的增加,這反過(guò)來(lái)又使 Web 開(kāi)發(fā)人員更多地使用它。在現(xiàn)代網(wǎng)站上,瀏覽器經(jīng)常運(yùn)行跨越數(shù)十萬(wàn)行代碼的應(yīng)用程序。這是“網(wǎng)絡(luò)”的漫長(zhǎng)而漸進(jìn)的成長(zhǎng)過(guò)程,從一個(gè)簡(jiǎn)單的靜態(tài)頁(yè)面網(wǎng)絡(luò)開(kāi)始,演化為各種豐富應(yīng)用程序的平臺(tái)。
? ? 不僅如此,JS 已經(jīng)變得足夠流行,可以在瀏覽器上下文之外使用,例如使用 node.js 實(shí)現(xiàn) JS 服務(wù)器。JS 的“隨處運(yùn)行”特性使其成為跨平臺(tái)開(kāi)發(fā)的有吸引力的選擇?,F(xiàn)在有很多開(kāi)發(fā)人員只使用JavaScript 來(lái)編寫(xiě)他們的整個(gè)堆棧!
? ? 總而言之,我們擁有一種專(zhuān)為快速使用而設(shè)計(jì)的語(yǔ)言,然后發(fā)展成為一種成熟的工具來(lái)編寫(xiě)具有數(shù)百萬(wàn)行的應(yīng)用程序。每種語(yǔ)言都有自己的怪癖——古怪和驚喜,而 JavaScript 的不起眼的開(kāi)端使它擁有許多這樣的怪癖。一些例子:
JavaScript 的相等運(yùn)算符 (?
==
)強(qiáng)制轉(zhuǎn)換其參數(shù),導(dǎo)致意外行為:if ("" == 0) { // It is! But why?? } if (1 < x < 3) { // True for *any* value of x! }
JavaScript 還允許訪問(wèn)不存在的屬性:
const obj = { width: 10, height: 15 }; // Why is this NaN? Spelling is hard! const area = obj.width * obj.heigth;
大多數(shù)編程語(yǔ)言會(huì)在發(fā)生此類(lèi)錯(cuò)誤時(shí)拋出錯(cuò)誤,有些會(huì)在編譯期間拋出錯(cuò)誤——在任何代碼運(yùn)行之前。在編寫(xiě)小程序時(shí),這種怪癖很煩人但可以管理;在編寫(xiě)包含數(shù)百或數(shù)千行代碼的應(yīng)用程序時(shí),這些不斷出現(xiàn)的意外是一個(gè)嚴(yán)重的問(wèn)題。
二、TypeScript:靜態(tài)類(lèi)型檢查器
? 有些語(yǔ)言根本不允許那些有缺陷的程序運(yùn)行。在不運(yùn)行代碼的情況下檢測(cè)代碼中的錯(cuò)誤稱(chēng)為靜態(tài)檢查。根據(jù)正在操作的值的種類(lèi)來(lái)確定什么是錯(cuò)誤,什么不是錯(cuò)誤,這被稱(chēng)為靜態(tài)類(lèi)型檢查。
TypeScript 在執(zhí)行前檢查程序是否有錯(cuò)誤,并根據(jù)值的種類(lèi)進(jìn)行檢查,使其成為靜態(tài)類(lèi)型檢查器。例如,上面的最后一個(gè)例子因?yàn)閛bj. 這是 TypeScript 發(fā)現(xiàn)的錯(cuò)誤:
1、類(lèi)型化的 JavaScript 超集
但是,TypeScript 與 JavaScript 有何關(guān)系?
1.1、句法
TypeScript 是一種語(yǔ)言,是JavaScript 的超集:因此 JS 語(yǔ)法是合法的 TS。語(yǔ)法是指我們編寫(xiě)文本以形成程序的方式。例如,此代碼存在語(yǔ)法錯(cuò)誤,因?yàn)樗鄙?:
由于其語(yǔ)法,TypeScript 不會(huì)將任何 JavaScript 代碼視為錯(cuò)誤。這意味著可以將任何有效的 JavaScript 代碼放入 TypeScript 文件中,而不必?fù)?dān)心它的具體編寫(xiě)方式。
1.2、類(lèi)型
然而,TypeScript 是一個(gè)類(lèi)型超集,這意味著它添加了關(guān)于如何使用不同類(lèi)型的值的規(guī)則。較早的錯(cuò)誤 aboutobj.heigth不是語(yǔ)法錯(cuò)誤:它是以不正確的方式使用某種值(類(lèi)型)的錯(cuò)誤。
作為另一個(gè)示例,這是可以在瀏覽器中運(yùn)行的 JavaScript 代碼,它將記錄一個(gè)值:
這個(gè)語(yǔ)法上合法的程序記錄Infinity. 但是,TypeScript 將數(shù)字除以數(shù)組視為無(wú)意義的操作,并且會(huì)發(fā)出錯(cuò)誤:
有可能真的打算將一個(gè)數(shù)字除以一個(gè)數(shù)組,也許只是為了看看會(huì)發(fā)生什么,但大多數(shù)時(shí)候,這是一個(gè)編程錯(cuò)誤。TypeScript 的類(lèi)型檢查器旨在允許正確的程序通過(guò),同時(shí)仍然捕獲盡可能多的常見(jiàn)錯(cuò)誤。(稍后,我們將了解可用于配置 TypeScript 檢查代碼的嚴(yán)格程度的設(shè)置。)
如果將一些代碼從 JavaScript 文件移動(dòng)到 TypeScript 文件,可能會(huì)看到類(lèi)型錯(cuò)誤,具體取決于代碼的編寫(xiě)方式。這些可能是代碼的合理問(wèn)題,或者 TypeScript 過(guò)于保守。在本指南中,我們將演示如何添加各種 TypeScript 語(yǔ)法來(lái)消除此類(lèi)錯(cuò)誤。
1.3、運(yùn)行時(shí)行為
? TypeScript 也是一種保留了JavaScript運(yùn)行時(shí)行為的編程語(yǔ)言。例如,在 JavaScript 中除以零會(huì)產(chǎn)生Infinity而不是拋出運(yùn)行時(shí)異常。原則上,TypeScript從不改變 JavaScript 代碼的運(yùn)行時(shí)行為。
? 這意味著,如果將代碼從 JavaScript 移至 TypeScript,即使 TypeScript 認(rèn)為代碼存在類(lèi)型錯(cuò)誤,它也能保證以相同的方式運(yùn)行。
? 保持與 JavaScript 相同的運(yùn)行時(shí)行為是 TypeScript 的基本承諾,因?yàn)檫@意味著可以輕松地在兩種語(yǔ)言之間轉(zhuǎn)換,而不必?fù)?dān)心可能導(dǎo)致程序停止運(yùn)行的細(xì)微差異。
1.4、擦除類(lèi)型
粗略地說(shuō),一旦 TypeScript 的編譯器檢查完代碼,它就會(huì)擦除類(lèi)型以生成生成的“編譯”代碼。這意味著一旦代碼被編譯,生成的普通 JS 代碼就沒(méi)有類(lèi)型信息。
這也意味著 TypeScript 永遠(yuǎn)不會(huì)根據(jù)它推斷的類(lèi)型更改程序的行為。最重要的是,雖然可能會(huì)在編譯期間看到類(lèi)型錯(cuò)誤,但類(lèi)型系統(tǒng)本身與程序運(yùn)行時(shí)的工作方式無(wú)關(guān)。
最后,TypeScript 不提供任何額外的運(yùn)行時(shí)庫(kù)。程序?qū)⑹褂门c JavaScript 程序相同的標(biāo)準(zhǔn)庫(kù)(或外部庫(kù)),因此無(wú)需學(xué)習(xí)額外的 TypeScript 特定框架。
2、學(xué)習(xí) JavaScript 還是?TypeScript
我們經(jīng)??吹健拔覒?yīng)該學(xué)習(xí) JavaScript 還是 TypeScript?”這個(gè)問(wèn)題。
答案是兩者不是水火不容,不學(xué)JavaScript就學(xué)不會(huì)TypeScript!TypeScript 與 JavaScript 共享語(yǔ)法和運(yùn)行時(shí)行為,因此學(xué)習(xí)的任何有關(guān) JavaScript 的知識(shí)都可以同時(shí)幫助學(xué)習(xí) TypeScript。
有很多資源可供程序員學(xué)習(xí) JavaScript;如果正在編寫(xiě) TypeScript,則不應(yīng)忽略這些資源。例如,標(biāo)記的 StackOverflow 問(wèn)題大約是 的 20 倍javascript,typescript但所有問(wèn)題javascript也適用于 TypeScript。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-454978.html
如果發(fā)現(xiàn)自己正在搜索諸如“如何在 TypeScript 中對(duì)列表進(jìn)行排序”之類(lèi)的內(nèi)容,請(qǐng)記住:TypeScript 是帶有編譯時(shí)類(lèi)型檢查器的 JavaScript 運(yùn)行時(shí)。在 TypeScript 中對(duì)列表進(jìn)行排序的方式與在 JavaScript 中排序的方式相同。如果找到直接使用 TypeScript 的資源,那也很好,但不要局限于認(rèn)為需要特定于 TypeScript 的答案來(lái)解決有關(guān)如何完成運(yùn)行時(shí)任務(wù)的日常問(wèn)題。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-454978.html
到了這里,關(guān)于TypeScript與JavaScript的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!