日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
對(duì)于現(xiàn)代開(kāi)發(fā)來(lái)說(shuō),JavaScript就是一種垃圾語(yǔ)言

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

為云岡等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及云岡網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、做網(wǎng)站、云岡網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

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

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

我來(lái)說(shuō)一下為什么Javascript糟糕,當(dāng)然了,它也有好的方面。 但是問(wèn)題就是太不實(shí)用。比如說(shuō)原型繼承(prototypal inheritance)就限制頗多-因?yàn)檫@玩意說(shuō)白了就是function override,還有就是那句:“萬(wàn)物皆function” 也是相當(dāng)?shù)膹U柴-因?yàn)橐籪unction不是一個(gè)對(duì)象,也不能當(dāng)做數(shù)據(jù)機(jī)構(gòu)來(lái)承載數(shù)據(jù)。

其實(shí)真正的吐槽才剛剛開(kāi)始,隨便列幾個(gè)吧:

JS的調(diào)用屬性

看這個(gè)屎一樣的設(shè)計(jì),回顧過(guò)去,咱們很難苛責(zé)語(yǔ)言的設(shè)計(jì)人員,因?yàn)樗鼈兛赡芴幱谛阅芸紤],再者,如果不習(xí)慣消息-傳遞機(jī)制的語(yǔ)言的話,你會(huì)覺(jué)得怎么”一些屬性可以被調(diào)用而另外一些就不可以呢“!

哈希對(duì)象對(duì)于stable 鍵不可用

對(duì)象和哈希的混合不是一個(gè)好點(diǎn)子,因?yàn)樗`反了對(duì)象可以擁有metadata的前提,metadata允許我們建立基本類(lèi)型系統(tǒng)或者至少各種類(lèi)型的introspection

函數(shù)對(duì)象對(duì)于類(lèi)型系統(tǒng)不可用 因?yàn)橐粋€(gè)對(duì)象不攜帶任何類(lèi)型信息

這可是大事,Ruby的世界里也是這樣,感覺(jué)所有的東西都在像鴨子一樣快樂(lè)的嘎嘎叫,我們經(jīng)常用Object$class 來(lái)獲取對(duì)象信息,下面是給HTML元素加樣式的標(biāo)準(zhǔn)的流程:

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

在JS里是不可能的,因?yàn)橹挥小疧bject’,’function’和原始類(lèi)型才有類(lèi)型信息

到處是Null

不小心用錯(cuò)了一個(gè)常量

 
 
 
  1. MyApp.SYNC // should have been MyApp.SYNC_FETCH 

任何事情都不會(huì)發(fā)生,因?yàn)閷?duì)象是hashes,而且js給常量默認(rèn)為0。 帶著錯(cuò)誤key的常量將會(huì)是undefined,而且還會(huì)滲透到被調(diào)用函數(shù)中,等出了事,慢慢跟蹤debug去吧

回調(diào)的深淵

JS缺少合適的deferred功能,不是多線程,就得靠事件化執(zhí)行,你的調(diào)用會(huì)散落在各個(gè)事件回調(diào)中,代碼都完事了,回調(diào)還在那執(zhí)行呢,比如,JS干下面這個(gè)是就費(fèi)勁

 
 
 
  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 

因?yàn)槟阍诘纫粋€(gè)結(jié)果,就在等待的這會(huì),runtime完全可以進(jìn)行事件處理、DOM重繪、干啥都行

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

當(dāng)然了,JS社區(qū)做了跟PHP社區(qū)一直以來(lái)一樣的事情-給Javascript這坨屎擦屁股,怎么擦呢?用更多的回調(diào),好點(diǎn)的,就是回調(diào)鏈

 
 
 
  1. when( 
  2.  // 48 lines of code down 
  3. ).then( 
  4. // 23 lines down 
  5. ).then(

一般情況下,加入一個(gè)wait primitive就在獲取結(jié)果的等待過(guò)程中控制events,

專業(yè)一點(diǎn)的做法就是啥玩意咱都異步,現(xiàn)實(shí)是你寫(xiě)的代碼80%都是同步的,因?yàn)槌绦蚶?0%干的都是一個(gè)操蛋的事情跟另外一個(gè)操蛋的事情一起搞,而且你需要它倆都它媽的完事了才行。

可怕的異常處理機(jī)制

異常處理在JS中機(jī)器可怕,一般形式-你可以查看調(diào)用堆棧(一堆匿名函數(shù)和好點(diǎn)的名字的函數(shù)),你可看到錯(cuò)誤信息,我就提兩個(gè)經(jīng)常碰到的錯(cuò)誤:

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

這都拜javascript中“函數(shù)對(duì)(泥煤)象”所賜,根本沒(méi)有方法定義-它們只有屬性,JS運(yùn)行時(shí)永遠(yuǎn)沒(méi)有辦法知道函數(shù)對(duì)象有沒(méi)有方法可以被調(diào)用,或者某個(gè)屬性名稱 – 它就認(rèn)為你的哈希鍵不存在,

我記得Ruby社區(qū)里的人抱怨Ruby的回溯和錯(cuò)誤消息機(jī)制不好用,Rubinius就給解決了,在泥煤的javascript里,你知道錯(cuò)誤消息 特別亂嗎?因?yàn)橛心阆氲玫胶褪褂玫膬蓚€(gè)最最基本,最最重要的異常NameError和NoMethodError 都可能,這在其它語(yǔ)言里都是不能理解的,但javascript語(yǔ)言就這么馬馬虎虎的用起來(lái)了

不可否認(rèn),functions是亮點(diǎn),原型也是好東西,但是如果你想建立一個(gè)稍微復(fù)雜的JS應(yīng)用,你就得這么寫(xiě):

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

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

這是為啥呢?因?yàn)樗卸际莌ash而且這個(gè)語(yǔ)言不能做任何形式的introspection

還有一個(gè)困擾我的事就是有些大哥居然從Ruby轉(zhuǎn)戰(zhàn)Node,還贊Node是個(gè)好東西。Node也許是好寶貝,但是想想它內(nèi)部運(yùn)行著屎一樣的Javascript語(yǔ)言,我就由衷地想退避三舍。

這么說(shuō)吧,JS一日不好用,我便一日不會(huì)用Node,謝謝

我理解有一些人想跳出MRI架構(gòu),投身Node,很簡(jiǎn)單啊- -你不會(huì)說(shuō)日語(yǔ), 所以你舔個(gè)臉說(shuō)日語(yǔ)很難學(xué),話撂這,你在MRI上的有精進(jìn)的機(jī)會(huì)也它媽趨近于0.

JS是屎,但凡我們有那么一絲絲的擔(dān)當(dāng),就該盡自己的綿薄之力要么讓它壽終正寢,要么幫助它更上一層樓,天天在那沾沾自喜對(duì)它的發(fā)展沒(méi)有一點(diǎn)幫助,CoffeeScript做的還遠(yuǎn)遠(yuǎn)不夠。

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

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


網(wǎng)站名稱:對(duì)于現(xiàn)代開(kāi)發(fā)來(lái)說(shuō),JavaScript就是一種垃圾語(yǔ)言
文章鏈接:http://www.5511xx.com/article/dppieip.html