昨日冬游,車上閑聊公司未來的產品方向、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,你是不是急着想掌握這門高效的賺錢技能?不要急,敬請期待下一篇博文!