在網際網路的時代,每一個人都離不開瀏覽器。而每一個極具特性,受廣大網友喜歡的網站,都離不開JavaScript語言的貢獻。而且,當前網際網路的每一個新形態,比如比較火的微信小程序,都會給JavaScript留二次開發的渠道。這就是JavaScript這門屬於網絡的高級腳本語言的現狀。
引言
JavaScript程式語言通常被簡稱為JS,被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。JS的最大特點是編程環境簡單,入門門檻較低。
JavaScript是一種腳本語言,其原始碼在發往客戶端運行之前不需經過編譯,而是將文本格式的字符代碼發送給瀏覽器由瀏覽器解釋運行。也就是說,JavaScript語言編寫的腳本是通過嵌入在HTML中來實現自身的功能的。
JavaScript最初由網景公司(Netscape)的 Brendan Eich 設計,將其命名為LiveScript,後來網景公司在與Sun合作之後將其改名為JavaScript。
JavaScript語言的前世今生
1994年,網景公司發布了旗下 Navigator 瀏覽器 0.9 版。這是歷史上第一個比較成熟的網絡瀏覽器,轟動一時,引起了當時人們的極大關注。但是,這個版本的瀏覽器只能用來瀏覽,不具備與訪問者互動的能力。因此,網景公司急需一種網頁腳本語言,使得瀏覽器可以與網頁進行互動。
就在這時,發生了另外一件大事:1995年,Sun公司將Oak語言改名為Java,正式向市場推出。Java的"一次編寫,到處運行"特性,使得其看上去很可能成為未來的主宰。網景公司決定與Sun公司結成聯盟,不僅允許Java程序以 Applet(小程序)的形式,直接在瀏覽器中運行;甚至還考慮直接將 Java 作為腳本語言嵌入網頁,只是因為這樣會使HTML網頁過於複雜,後來才不得不放棄。
此時,34歲的系統程式設計師Brendan Eich登場了。1995年4月,網景公司錄用了他,研究將Scheme語言作為網頁腳本語言的可能性。而 Brendan Eich 的主要方向和興趣就是函數式編程,他以為進入新公司後,會主要與Scheme語言打交道。
但僅僅一個月之後,1995年5月,網景公司做出決策,未來的網頁腳本語言必須「看上去與Java足夠相似」,但是要比Java簡單,使得非專業的網頁作者也能很快上手。而 Brendan Eich 被指定為這種"簡化版Java語言"的設計師。
而Brendan Eich本人對 Java 是沒有一點興趣,為了應付公司安排的任務,他只用10天時間就把 Javascript 設計出來了。由於設計時間太短,語言的一些細節考慮得不夠嚴謹,導致後來很長一段時間,Javascript寫出來的程序混亂不堪。而就是這種初期混亂不堪的語言,未來卻成為了網際網路第一程式語言,真是世事難料啊。
當然,Breadan Eich 本人也不太喜歡自己的這個作品,曾經說過:"與其說我愛Javascript,不如說我恨它。它是C語言和Self語言一夜情的產物。十八世紀英國文學家詹森博士說得好:'它的優秀之處並非原創,它的原創之處並不優秀。"
JavaScript:又不是我製造出了「千年蟲」
總的來說,對於JavaScript語言的設計,Breadan Eich 的設計思路是這樣的:
借鑑 C 語言的基本語法;借鑑 Java 語言的數據類型和內存管理;借鑑 Scheme 語言,將函數提升到"第一等公民"(first class)的地位;借鑑 Self 語言,使用基於原型(Prototype)的繼承機制。所以,Javascript語言實際上是兩種語言風格的混合產物----(簡化的)函數式編程+(簡化的)面向對象編程。這是由Brendan Eich(函數式編程)與網景公司(面向對象編程)共同決定的。
而千禧年(公元2000年)時,被炒得火熱無比一個詞——「千年蟲」,能夠被廣泛傳播的原因,很大程度上也與JavaScript語言有關。
因為JavaScript語言的日期類直接採用了 java.util.Date函數庫,其中的 Date.getYear() 返回的應該是年份的最後兩位。如果用這個函數生成年份,某些網頁可能出現"19100"這樣的結果。
這個問題的存在,使得上世紀九十年代火熱的網際網路造就的廣大網民,都知道了千年蟲,讓這個從根本上說是一種電腦程式處理日期上的 Bug,成了普通人都熱議的話題。
結語
任何事物的誕生,都存在偶然性。而誕生之後是否能夠流芳百世、名傳千古,那完全是機緣與時代的產物。一個程式設計師用了十天創造出的、混亂不堪的計算機程式語言,在網際網路大潮中,搭上了瀏覽器的快車,便快速的發展壯大,影響著人們對網際網路的使用。
拿現在網際網路界的流行語來說,這也算是站在風口上的「豬」吧,而JavaScript語言的成長史,那就應該算是醜小鴨變天鵝的典型了吧。
#JavaScript#