JavaScript的前世今生

huang發表於2016-11-27

  昨日冬遊,車上閒聊公司未來的產品方向、HTML5潮流、如此等等。Leader突然說“你js怎麼那麼NB”。耳風剛過,不知是受誇若驚,還是自覺水平太low。似乎有點驚喜也有點壓力。要知道,哥一直以服務端碼農的身份混跡江湖,心想“要靠js混飯,還得努力啊”。

  然而,Leader無意一句話,倒讓我不禁思索一番。Leader出身於NB的後端碼農,像絕大部分後端工程師一樣。或許對前端不太感冒,或是js坑爹的偽OO、拐彎抹角的執行機制困惑了他們。在哥看來掌握js絕非難事,我曾經也是個對js一竅不通的java農,當年對面js,我也不知道:這玩兒怎麼去實現OO?this到處是,代表的是什麼?到底什麼原型鏈?如此等等,用java、c#那套高階完整的OO詞法去琢磨js實在難以理解接受。為此,我希望以java農的身份,有的放矢,寫幾篇blogs,或許文筆笨拙,但仍期望對後端同學有所幫助。

  上面扯那麼多,無非是找點寫感,料想當年畢業論文一過,洋洋灑灑一百字以上的文章都沒寫過,現在更甚,哄妹子都不會,以至於單身至今。廢話了,下面重點來了!

  想必,同學你已經看了標題《JavaScript的前世今生》,不是說寫點有助於同學的blogs嗎,怎麼搞個history了?我告訴你:學習得以追女那勁頭去實踐,今天你想要將js"玩弄"在手,你就得像追妹子一樣,先了解妹子的history。這妹子是來自哪裡的?都在哪兒念過書?有過多少個男友等等,這樣才能全面點了解妹子的各種"特性"。當然這裡沒有要玩弄妹子的意思\(^o^)/~。

  人類的進步都是在各種各樣的需求中推進的。JavaScript的出現也是需求使然。說Javascript誕生之前,得先說說internet是怎麼搞出來的。上世紀60年代,老美搞了個國防通訊網,為的是win the war;到了80年代,還是老美的磚家,不過這回的主角是善良的科學家與教育磚家。他們為了方便遍佈各地的科研機構、學校能夠快速進行資料交換共享,於是搞了全國性的網路,將這些機構連線起來。這個時候,網際網路出生了。但是還只侷限高磚們使用,他們進行資料交換的格式也只是高磚們開個會議、拍拍腦袋就定調的各種文字格式。

  到了90年代,internet開始走出科研機構、實驗室,開始了商用的路程,即老百姓也用得了。但這個時候,問題來了,老百姓不是磚家,他們可不能開會定資料交換的格式。是的,老百姓的需求來了!於是各大軟體公司、如NetScape、microsoft紛紛推出了基於超文字傳輸協議(HTTP,HyperText Transfer Protocol)資料交換格式的NB軟體!它就是今天我們天天都用到的的瀏覽器!

  啊!瀏覽器來了!這牛B的軟體,能將正確解析通過internet傳輸的文字、圖片;能夠接收鍵盤的輸入,將我們想要表達的意思傳輸給另一方。但是,你看準了!這NB的軟體當時很傻,只能做接收資料、呈現資料的事情,無法對輸入資料進行任何校驗。比如你本想給妹子轉賬100美金,但是手賤多按了幾個0,瀏覽器毫無提示就將資料提交到伺服器了,當然伺服器會有校驗。但是當時的internet慢得像綠皮火車,好不容易將你轉賬這個資訊運到了目的地(伺服器),才進行檢驗,才發現你不能轉那麼多錢。於是綠皮車又像蝸牛一樣將你不能轉賬的資訊運回去,告訴你可能輸入的金額錯誤了!你懂的,綠皮車慢得讓人受不了!這一來回,你已經喝了幾杯咖啡,才得到提示“我不能轉那麼多錢”!磚家們更受不了!於是,需求又來了!大牛們又擠在一起喝咖啡,商討怎麼解決這個問題。大約在1995年,NetScape裡面有個NB的程式設計師布蘭登-艾奇,他搞了個liveScript指令碼語言,直接整合到Navigator2瀏覽器上。是的,這個liveScript能夠滿足解決前面遇到的問題。但你看準了,它的名字叫“liveScript”,那時候的它還不叫javascript。那現在叫的“javascript”又是怎麼來的呢?這事情還得扯到曾經偉大得像太陽的sun公司。那時,sun公司那個牛b得“一次編譯、到處執行”的java已經被熱炒。Navigator的老大們也懂點營銷策略,為了給即將推出的Navigator2增加籌碼,於是找上了sun的大門。詢問能不能借用“java”的頭銜。sun也是夠偉大的,二話不說,拿去用吧!要是放到現在,這個詞估計要花上好幾百元億美金(sun之死,是不是由於太慷慨了呢?)。於是乎,原來的liveScript變成了現在的javascript。鞋同們,看到這裡應該javascript與java是什麼關係了吧?可別再想javascript和java有可能是同一條船的了!

  到此,你現在終於知道javascript是怎麼來的了吧!好!很好!那問題也來了。當時的出生環境、出生需求,註定了javascript的各種變態特性。話說199x年那段日子,java還是個嬰兒,程式設計界還是c、c++這類言語當道,雖然c++這種改良的c跟當代oo思想靠上了邊。但是各大高手們,都已經深受c言語的毒害。布蘭登-艾奇也不列外,這傢伙在設計liveScript的時候,明顯受到了c言語的影響。所以你看到的javascript沒有namespace(在java裡面叫pakeage)、沒有class的概念、更沒有繼承、重寫、過載的設計特性。那現在的javascript物件導向程式設計是怎麼回事,那都利用了奇淫技巧、拐彎抹角去實現的。不過我們都是幸運的,Javascript ES6版本的物件導向特性已經進一步完善,以後不會那麼彆扭了。

  是的,javascript應運而生了,但是自出生以來,它的地位一直不高,它被設計為簡單的瀏覽器資料校驗角色。說白了可有可無,如果不採用javascript進行客戶端驗證,無非是要發回伺服器驗證而已,只是由於網路傳輸,使用體驗差而已。並不是離開了它就活不了。javascript的尷尬地位從出生那天就已經註定了。

  俗話說“留得青山在不愁沒柴燒”,javascript撐著這可有可無的身份混到了二十世紀初。internet出現了影響深遠的Ajax技術(非同步JavaScript和XML技術),也拯救了javascript。要說感謝,javascript得感謝兩個偉大的公司,一個是microsoft、一個是google。二十世紀初那會,webservice興起,你懂的,websercie的傳輸協議文字格式其實就是一個xml。微軟為此率先以ActiveXObject的形式在自己瀏覽器裡搞了個XMLHTTPRequest。一看名字就知道,這玩兒當時是為了在瀏覽器上實現與服務端的webservice應用通訊。結果微軟此舉甚是成功,各大瀏覽器廠商紛紛跟進,效仿微軟(不要噴得太多國內的網際網路抄襲之風,有能力才能抄襲,無能力只能出錢買)。於是乎現代瀏覽器都實現了XMLHTTPRequest,為Ajax技術提供了實現基礎。那為何,javascript要感謝google呢?XMLHTTPRequest的出現算是挽救了javascript,但是真正讓javascript擺脫可有可無地位的是google。眾所周知,google是個創新型的偉大公司,其實google的創新並不都是創造了新的事物,更多是的利用現有的東西來進行組合創新,現在的安卓系統如此,當年對Ajax的應用也是如此。正當那會XMLHTTPRequest火熱的時候,google將這個新事物應用到了Gmai、google地圖等熱門應用上,大獲得成功。javascript由此翻身,成為了web開發領域必殺技!

  雖然javascript已經翻身做了web端開發的主人,但歷史還在演進,技術還在不停更新。時至今日,軟體應用已經深入老百姓生活的方方面面。這幾年,移動網際網路的迅猛發展,更是將javascript技能推向前所未有的高地。javascript的身影也不只侷限於當時設計的應用範圍。其已經出現在服務端程式設計中,尤其是移動跨平臺開發,更是一門高效的賺錢技能。

  鞋同們!看了它的history,你是不是急著想掌握這門高效的賺錢技能?不要急,敬請期待下一篇博文!


相關文章