來(lái)源:派臣科技|時(shí)間:2019-12-07|瀏覽:次
關(guān)于JavaScript是好是壞,還沒(méi)有定論,所以在本文中,我們將討論JavaScript的優(yōu)點(diǎn)、缺點(diǎn)和替代方案。
標(biāo)題問(wèn)題的簡(jiǎn)短回答是“不”。
較長(zhǎng)的答案比較復(fù)雜,以“kindof…”開(kāi)頭,對(duì)于開(kāi)發(fā)人員有幾種JavaScript替代方案,但是(目前)在部署之前必須將它們轉(zhuǎn)換成JavaScript。
人們討厭JavaScript
如果我們考慮到這種編程語(yǔ)言的一些明顯缺陷(包括IEEE 754的雙精度),即許多函數(shù)和屬性在不同的瀏覽器中執(zhí)行的方式不同,強(qiáng)制轉(zhuǎn)換和有問(wèn)題的全局變量(僅舉幾個(gè)例子),這并不奇怪。
然而,最近一項(xiàng)有98,000名開(kāi)發(fā)人員參與的調(diào)查顯示,JavaScript實(shí)際上是第二大最受歡迎的編程語(yǔ)言,49%的人支持JavaScript。
在我看來(lái),編程語(yǔ)言允許自動(dòng)完成、滾動(dòng)和下拉菜單效果、在頁(yè)面上動(dòng)畫(huà)化不同的元素、播放音頻和視頻以及許多其他能夠帶來(lái)豐富客戶(hù)體驗(yàn)的很酷的特性,有什么理由不喜歡它呢?
此外,我們正在討論的是一種與許多其他語(yǔ)言兼容的常青語(yǔ)言,而這種通用性是極其重要的。
JavaScript的好處
說(shuō)到JavaScript,我們真的很喜歡它,下面是它是最受歡迎和使用最廣泛的編程語(yǔ)言之一的一些原因:
當(dāng)涉及到前端開(kāi)發(fā)和客戶(hù)端接口時(shí),它是惟一的實(shí)際選擇,因?yàn)樗试S程序員創(chuàng)建各種交互元素和動(dòng)態(tài)web頁(yè)面;
JavaScript很輕,語(yǔ)法簡(jiǎn)單,使用單線程事件循環(huán)模型,消除了很多編程復(fù)雜性;
這是prototype-oriented;
隨著Node的引入。JavaScript打開(kāi)了后端編程選項(xiàng),這些選項(xiàng)曾經(jīng)只保留給服務(wù)器端語(yǔ)言,如Java、Python或Ruby。
JavaScript的壞處
以下是一些開(kāi)發(fā)者盡量避免使用JavaScript的原因:
它是弱類(lèi)型的,這使得代碼比較模糊;
由于用戶(hù)可以看到代碼,JavaScript可能被用于惡意目的,危害客戶(hù)端安全;
代碼發(fā)布之前必須在不同的瀏覽器上測(cè)試,因?yàn)樗粫?huì)以相同的方式在每個(gè)瀏覽器上執(zhí)行;
缺乏調(diào)試使得開(kāi)發(fā)人員很難發(fā)現(xiàn)問(wèn)題。
JavaScript的可行替代品
公平地說(shuō),JavaScript沒(méi)有真正的替代品,因?yàn)檎麄€(gè)JS框架都可以被繞過(guò)。
所有這些替代方案實(shí)際上都是權(quán)宜之計(jì),只允許在編寫(xiě)代碼時(shí)避免使用JavaScript,但問(wèn)題是,為典型用戶(hù)計(jì)算機(jī)編寫(xiě)的代碼需要在其上運(yùn)行。這些替代方案使用將另一種語(yǔ)言轉(zhuǎn)換為JavaScript的過(guò)程。
下面是5個(gè)顯著改進(jìn)JavaScript的值得注意的替代方案。
1. 飛鏢
Dart是一種面向?qū)ο蟮念?lèi)似于c的語(yǔ)言谷歌,旨在取代JavaScript。Dart是靜態(tài)類(lèi)型的,這意味著它消除了JS代碼中一些最常見(jiàn)的錯(cuò)誤來(lái)源。它支持類(lèi)型推斷,這是一個(gè)很大的優(yōu)點(diǎn)。
盡管如此,這個(gè)JS替代方案最有利的特性之一是,它允許您超越客戶(hù)端開(kāi)發(fā),創(chuàng)建獨(dú)立的應(yīng)用程序。使用谷歌的UI工具包,可以構(gòu)建本地web、桌面和移動(dòng)應(yīng)用程序。然而,作為程序員的新手,Dart在市場(chǎng)上并不常用,它提供的在線資源有限,這意味著一旦遇到問(wèn)題,就很難找到解決方案。
2. 打印稿
由Microsoft開(kāi)發(fā)的TypeScript實(shí)際上更像是一個(gè)JavaScript的超集,這意味著它基本上添加了新的方法,改進(jìn)和更新了現(xiàn)有的JS特性,并消除了它的某些限制,最重要的是添加了可選的靜態(tài)類(lèi)型。換句話(huà)說(shuō),在編譯成JS后,用TypeScript編寫(xiě)的應(yīng)用程序幾乎可以在任何瀏覽器中查看。
例如,Angular.js完全是在TypeScript中構(gòu)建的。
這個(gè)JS的另一個(gè)優(yōu)點(diǎn)是它與Node.js兼容。
但是,社區(qū)比較小,用TypeScript編碼需要更多的時(shí)間。
3.KAFFEINE見(jiàn)面吧
Kaffeine實(shí)際上是JavaScript語(yǔ)法的一組擴(kuò)展,目的是使某些任務(wù)更容易。例如,它幫助前端開(kāi)發(fā)人員使用JavaScript的回調(diào)函數(shù),因?yàn)樗С之惒讲僮鳌?/p>
對(duì)于Kaffeine,調(diào)試的過(guò)程要簡(jiǎn)單得多,而且除了對(duì)開(kāi)發(fā)人員來(lái)說(shuō)很容易之外,這個(gè)JS擴(kuò)展對(duì)終端用戶(hù)也很有好處,因?yàn)闉g覽器不會(huì)凍結(jié),這意味著用戶(hù)體驗(yàn)是平穩(wěn)的。
同樣,一個(gè)小得多的社區(qū)和資源的缺乏使得這種編程語(yǔ)言有點(diǎn)晦澀。
4. 榆樹(shù)
Elm是一種靜態(tài)類(lèi)型的函數(shù)語(yǔ)言,它與Haskell的相似度超過(guò)了與C的相似度,但與前者不同的是,它不會(huì)讓開(kāi)發(fā)人員對(duì)其復(fù)雜性感到困惑。
它與JavaScript的主要區(qū)別在于,它不是一種通用語(yǔ)言,而是一種提供高級(jí)前端web應(yīng)用程序開(kāi)發(fā)經(jīng)驗(yàn)的解決方案。
在Elm中編碼時(shí),當(dāng)錯(cuò)誤發(fā)生時(shí),開(kāi)發(fā)人員可以立即得到通知,以便他們能夠及時(shí)地修正它,這可以防止在以后的開(kāi)發(fā)階段出現(xiàn)大量的bug。這個(gè)程序使用的口號(hào)是“在實(shí)踐中沒(méi)有運(yùn)行時(shí)異常”,這基本上意味著如果用Elm編寫(xiě)的應(yīng)用程序開(kāi)始運(yùn)行,它就不太可能崩潰。
它的一些缺點(diǎn)包括缺乏服務(wù)器端,學(xué)習(xí)曲線比較陡峭,以及缺少一些高級(jí)功能。
5. COFFEESCRIPT
據(jù)說(shuō)CoffeeScript可以提高原始語(yǔ)言的可讀性,簡(jiǎn)化代碼并使其更短。它與Node.js的兼容性是另一個(gè)優(yōu)點(diǎn)。
然而,值得一提的是,希望使用CoffeeScript的開(kāi)發(fā)人員仍然需要大量使用JavaScript。它的主要缺點(diǎn)之一是一組有限的特性,以及JavaScript發(fā)布的ES6版本升級(jí)實(shí)際上使CoffeeScript變得多余(這次升級(jí)加速了JavaScript,使其幾乎與CoffeeScript一樣快)。
簡(jiǎn)而言之,JavaScript目前是一種客戶(hù)端編程語(yǔ)言,它將一直存在下去。
這些替代方案可以增強(qiáng)它,并解決它的一些缺點(diǎn),但實(shí)際上不能在沒(méi)有JavaScript框架的情況下運(yùn)行,因此可以肯定地說(shuō),我們?nèi)匀恍枰却齁avaScript真正的繼承者能夠獨(dú)立于它工作。