成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對于現代開發來說,JavaScript就是一種垃圾語言

開發 開發工具 前端
昨天 Reddit/Programming 頻道的頭條熱帖是一篇來自 julik live 博主的技術吐槽文,最初的英文標題是“For modern development Javascript indeed is a shit language”。

我很抱歉,但 Crockford 就是堅持這么寫的(I’m sorry, but the Crockford arguments do not cut it.)。

Javascript在很多方面都爛透了,而且還極其無趣,我就納了悶了,大家為啥都義無返顧,群情激奮的跳進Node學習的大軍里,是!Node 是比Ruby快,Node是基于事件模型處理的,但讓我無法理解的是,一些人動不動就想把自己的程序用Node重構一下,過過腦子行嗎!

Javascript的繼承,深拷貝問題,不是定義一個新ECMA標準就能解決的,不是套個漂亮的語法外殼(比如CoffeeScript)就能搞 定的,不是用require實現個標準化或者引入classes就可以萬事大吉的,ECMA語言里不是有個引入classes的ActionScript 嗎!那玩意跟Javascript一樣屎,只要大家繼續用它,PHP框架的現狀就是JS的未來— 一堆一堆的人前赴后繼,日以繼夜的為這坨屎一樣的語言搭框架、寫工具。

我來說一下為什么Javascript糟糕,當然了,它也有好的方面。 但是問題就是太不實用。比如說原型繼承(prototypal inheritance)就限制頗多-因為這玩意說白了就是function override,還有就是那句:“萬物皆function” 也是相當的廢柴-因為一function不是一個對象,也不能當做數據機構來承載數據。

 

[[88550]]

其實真正的吐槽才剛剛開始,隨便列幾個吧:

JS的調用屬性

看這個屎一樣的設計,回顧過去,咱們很難苛責語言的設計人員,因為它們可能處于性能考慮,再者,如果不習慣消息-傳遞機制的語言的話,你會覺得怎么”一些屬性可以被調用而另外一些就不可以呢“!

哈希對象對于stable 鍵不可用

對象和哈希的混合不是一個好點子,因為它違反了對象可以擁有metadata的前提,metadata允許我們建立基本類型系統或者至少各種類型的introspection

函數對象對于類型系統不可用 因為一個對象不攜帶任何類型信息

這可是大事,Ruby的世界里也是這樣,感覺所有的東西都在像鴨子一樣快樂的嘎嘎叫,我們經常用Object$class 來獲取對象信息,下面是給HTML元素加樣式的標準的流程:

  1. <div class='<%= model.class %>' id='<%= [model.class, model.id].join %>' >… 

在JS里是不可能的,因為只有’Object’,’function’和原始類型才有類型信息

到處是Null

不小心用錯了一個常量

  1. MyApp.SYNC <i>// should have been MyApp.SYNC_FETCH</i> 

任何事情都不會發生,因為對象是hashes,而且js給常量默認為0。 帶著錯誤key的常量將會是undefined,而且還會滲透到被調用函數中,等出了事,慢慢跟蹤debug去吧

回調的深淵

JS缺少合適的deferred功能,不是多線程,就得靠事件化執行,你的調用會散落在各個事件回調中,代碼都完事了,回調還在那執行呢,比如,JS干下面這個是就費勁

  1. var res = await AjaxReq.fetch('/long-request'
  2. // because you are waiting for a result, here the runtime would 
  3.  // schedule event handling, DOM redraws and whatever else it can 
  4.  // squeeze in while you await 
  5. res.name // this will be only executed once res is available 

因為你在等一個結果,就在等待的這會,runtime完全可以進行事件處理、DOM重繪、干啥都行

res.name // this will be only executed once res is available 等res可以使用的時候在去執行res.name的操作

當然了,JS社區做了跟PHP社區一直以來一樣的事情-給Javascript這坨屎擦屁股,怎么擦呢?用更多的回調,好點的,就是回調鏈

  1. when(<ERMAGHERD RIDICULOUSLY LONG CALLBACK> 
  2.  // 48 lines of code down 
  3. ).then(<HOLYSHIT WHEN WILL THIS BE OVER> 
  4. // 23 lines down 
  5. ).then(<GIVE ME SOME COFFEE ALREADY>) 

一般情況下,加入一個wait primitive就在獲取結果的等待過程中控制events,

專業一點的做法就是啥玩意咱都異步,現實是你寫的代碼80%都是同步的,因為程序里80%干的都是一個操蛋的事情跟另外一個操蛋的事情一起搞,而且你需要它倆都它媽的完事了才行。

可怕的異常處理機制

異常處理在JS中機器可怕,一般形式-你可以查看調用堆棧(一堆匿名函數和好點的名字的函數),你可看到錯誤信息,我就提兩個經常碰到的錯誤:

  1. undefined is not a function 
  2.     cannot call property 'xyz' of undefined 

這都拜javascript中“函數對(泥煤)象”所賜,根本沒有方法定義-它們只有屬性,JS運行時永遠沒有辦法知道函數對象有沒有方法可以被調用,或者某個屬性名稱 – 它就認為你的哈希鍵不存在,

我記得Ruby社區里的人抱怨Ruby的回溯和錯誤消息機制不好用,Rubinius就給解決了,在泥煤的javascript里,你知道錯誤消息 特別亂嗎?因為有你想得到和使用的兩個最最基本,最最重要的異常NameError和NoMethodError 都可能,這在其它語言里都是不能理解的,但javascript語言就這么馬馬虎虎的用起來了

不可否認,functions是亮點,原型也是好東西,但是如果你想建立一個稍微復雜的JS應用,你就得這么寫:

  1. var cv = Marionette.CollectionView.extend({ 
  2.   itemView: MyApp.Views.WidgetView; 
  3. }); 

如果”MyApp.Views.WidgetView 還沒有定義“你會得到啥錯誤?”undefined is not a function”當然!你什么時候會得到呢?當CollectionView想要實例化你的視圖的時候,而不是當你定義變量cv的時候,你會忐忑好幾分 鐘,直到你明白了這錯誤是哪里導致的

這是為啥呢?因為所有都是hash而且這個語言不能做任何形式的introspection

還有一個困擾我的事就是有些大哥居然從Ruby轉戰Node,還贊Node是個好東西。Node也許是好寶貝,但是想想它內部運行著屎一樣的Javascript語言,我就由衷地想退避三舍。

這么說吧,JS一日不好用,我便一日不會用Node,謝謝

我理解有一些人想跳出MRI架構,投身Node,很簡單啊- -你不會說日語, 所以你舔個臉說日語很難學,話撂這,你在MRI上的有精進的機會也它媽趨近于0.

JS是屎,但凡我們有那么一絲絲的擔當,就該盡自己的綿薄之力要么讓它壽終正寢,要么幫助它更上一層樓,天天在那沾沾自喜對它的發展沒有一點幫助,CoffeeScript做的還遠遠不夠。

原文鏈接:http://live.julik.nl/2013/05/javascript-is-shit

譯文鏈接:http://blog.jobbole.com/50671/

責任編輯:陳四芳 來源: 伯樂在線
相關推薦

2019-01-25 18:42:55

Java程序員編程語言

2013-05-15 13:14:30

游戲開發

2015-08-03 09:36:01

賽迪翻譯

2015-08-31 09:27:21

語言界面UI

2024-05-11 08:14:53

2024-05-24 08:54:18

2010-01-21 16:24:02

C++語言

2012-11-01 13:41:25

編程語言BasicPerl

2012-03-14 11:46:30

ibmdw

2012-03-19 10:45:44

ibmdw

2010-01-25 15:09:17

C++語言

2025-03-26 08:00:00

2023-07-18 18:10:04

2013-09-10 10:14:19

程序員

2012-06-25 14:12:44

2011-06-28 08:59:57

HTML 5JavaScript

2024-05-30 08:01:52

2021-04-05 14:44:20

JavaScript循環代碼

2022-02-25 14:42:09

OpenHarmon環境搭建鴻蒙

2010-11-04 10:55:24

編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品免费视频 | 在线观看av不卡 | 国产福利视频 | 欧美精品福利 | 国产一区二区在线免费观看 | 中文字幕在线一区 | 日本爱爱视频 | 99re在线视频观看 | 国产日韩在线观看一区 | 久久国产一区二区三区 | 欧美久久久电影 | 欧美久久久久久久久 | 成人国产精品久久久 | 91免费在线播放 | 日本精品视频在线 | 亚洲有码转帖 | 精品久| www日本在线观看 | 日韩一二三区视频 | 日韩高清一区二区 | 欧美视频二区 | 久久久久久网站 | 一级黄色片美国 | 久久九九影视 | 日韩精品免费 | 国产精品视频入口 | 国产成人91视频 | 啪啪网页 | 亚洲成人精品视频 | 免费观看一级视频 | www国产成人免费观看视频,深夜成人网 | 日日日操| 草久久免费视频 | 99精品免费久久久久久久久日本 | 黄色一级视频免费 | av性色全交蜜桃成熟时 | 成人av在线播放 | av日韩在线播放 | 国产亚洲二区 | 欧美三级成人理伦 | 日本又色又爽又黄又高潮 |