avaScript 是一種動態的編程語言,自1995年問世以來,已經成為互聯網的核心技術之一。本文將對JavaScript的發展歷史進行回顧,從它的誕生到現代的發展,探討這門語言如何影響了前端開發的方方面面。
JavaScript 最初由Netscape的工程師Brendan Eich在1995年設計,并在Netscape Navigator 2.0中首次發布。最初的目的是為了讓網頁更加動態化,提升用戶體驗。
由于JavaScript在網頁開發中的重要性日益增加,Netscape將JavaScript提交給了Ecma International,希望能夠標準化這門語言。這導致了ECMAScript(ES)標準的誕生,ECMAScript 1于1997年發布。
ECMAScript 3在1999年發布,被認為是首個廣泛應用的JavaScript版本,它引入了正則表達式、異常處理等重要特性。
這個時期,主要的瀏覽器如Internet Explorer和Netscape Navigator爭奪市場份額,這導致了JavaScript實現上的分歧,給開發者帶來了不少挑戰。
經過長時間的停滯不前,ECMAScript 5(ES5)終于在2009年發布。ES5帶來了諸如JSON支持、嚴格模式(strict mode)、以及數組方法(如forEach、map等)的標準化。
ES6,也稱為ECMAScript 2015,是JavaScript歷史上最重要的更新之一。它引入了類、模塊、箭頭函數、Promises、模板字符串等現代JavaScript開發的基石。
自ES6發布后,ECMA采用了每年更新一次標準的模式,每個版本都會添加新的特性和語言改進。這些更新包括了async/await、spread/rest操作符、Array.prototype.includes等。
隨著WebAssembly的出現和Node.js的普及,JavaScript不再局限于瀏覽器端。現代JavaScript已經成為一種全棧開發語言,其生態系統和社區也在不斷壯大。
React、Angular、Vue等前端框架和庫的出現極大地改變了開發者構建界面的方式,使得開發更加模塊化、高效。
Webpack、Babel、TypeScript等工具的出現,讓開發者能夠使用最新的JavaScript特性,同時保證代碼能夠在舊版瀏覽器上運行。
Node.js的出現使得JavaScript能夠運行在服務器端,這讓JavaScript成為全棧開發的一個重要選項。
隨著前端項目的復雜度提升,前端工程化成為了開發流程的重要組成部分,涵蓋了模塊化開發、組件化開發、項目構建、自動化測試等方面。
從簡單的腳本語言到全棧開發語言,JavaScript的發展可謂是互聯網發展史上的一個縮影。它的未來充滿了無限可能,隨著技術的不斷進步和社區的共同努力,JavaScript將繼續引領前端開發的潮流。
者 | 泰斗賢若如
來源 | 泰斗賢若如
這次寫一篇對于JavaScript的簡介,我們知道的編程語言有很多種,比如Java、C++、Python等等,每種編程語言都有其獨具的特色,不論是語法格式還是表達形式,都能讓每個程序員沉淀在知識的海洋里難以自拔。
即每種編程語言都有無限的延展性,但如果我們考慮問題的時候追溯其根源,其實也不難發現每種編程語言都具有共同的初心,最直白的話就是人與計算機進行溝通的語言,在現實生活中,見什么人說什么話我們都很清楚,那在與計算機溝通的世界中,做什么事用什么編程語言溝通也是同樣的道理,前提就是我們要了解這些編程語言,在你需要選擇的時候做出正確的判斷,這也正是我寫此篇文章的意義。
在1994年,當時的網景公司(Netscape)憑借Navigator這個瀏覽器成為了Web時代開啟最著名的第一代的互聯網公司。當時所用的第一版本的瀏覽器就是下圖中的瀏覽器,相信有很多年輕朋友都沒有見過這種瀏覽器。如果大家回想十年前或是十五年前,大家用的瀏覽器應該是IE瀏覽器,那個時候的瀏覽器跟現在的比如說谷歌瀏覽器、火狐瀏覽器等相比而言,那就是天壤之別了。
這個最早版本的瀏覽器,整個瀏覽器都是靜態的,也就是用HTML和CSS寫的,并沒有像今天的各種瀏覽器一樣具有各種各樣的動態效果了,比如像網頁的圖片輪播、鼠標懸浮切換等效果。
網景公司就想在原來的靜態頁面的基礎上添加一些動態的效果,這時候網景公司出來一個很牛的人物叫布蘭登·艾奇,他用不到兩周的時間就設計出了能在網頁上實現動態效果的編程語言。
他設計出實現網頁動態效果的編程語言,并將其編程語言命名為JavaScript。
為什么會命名為JavaScript呢?原因是在當時,Java非常火,網景公司希望借用Java在當時的名氣來進行推廣。其實事實上呢,JavaScript除了語法上有點像Java外,別的地方都跟Java沒有任何關系。
從上面講的JavaScript的由來中,我們就知道JavaScript由網景公司的布蘭登·艾奇開發出來的,一年后,微軟又模仿JavaScript開發出了一種編程語言叫JScript,再后來,陸續又有別的商家推出JavaScript的不同實現語言。這就導致JavaScript的語法和特性日益混亂,其標準化問題被提上日程。最終由歐洲計算機制造商協會(ECMA)以JavaScript1.1為藍本,制定了【ECMA-262】標準,并由此標準定義了一種新腳本語言ECMAScript。隨后,ISO也采用ECMAScript作為標準,各瀏覽器廠商便紛紛開始將ECMAScript作為各自JavaScript實現的基礎。
那到底JavaScript和ECMAScript有什么關系呢?
ECMAScript其實并不等同于JavaScript,它只是JavaScript的核心標準(語法、類型、語句、關鍵字、保留字、操作符、對象),而JavaScript還包括文檔對象模型(DOM)和瀏覽器對象模型(BOM)等。其中各主流瀏覽器對ECMAScript的支持都還不錯,但對DOM的支持相差較大,對于BOM一直沒有相關標準。最后再簡單總結一下就是:ECMAScript是一種語言標準,JavaScript是對ECMAScript的一種實現。
1997年06月 :發布首版。
1997年06月:修改規范完全符合ISO/IEC 16262國際標準。
1998年6月,ECMAScript 2.0版發布。
1999年12月,ECMAScript 3.0版發布,成為JavaScript的通行標準,得到了廣泛支持。
1999年12月:增加正則、更好的文字處理、新的控制語句、try/catch異常處理、更加明確的錯誤定義,數字輸出格式等等。放棄發布。
2007年10月,ECMAScript4.0版草案發布,對3.0版做了大幅升級,預計次年8月發布正式版本。草案發布后,由于4.0版的目標過于激進,各方對于是否通過這個標準,發生了嚴重分歧。以Yahoo、Microsoft、Google為首的大公司,反對JavaScript的大幅升級,主張小幅改動;以JavaScript創造者Brendan Eich為首的Mozilla公司,則堅持當前的草案。
2008年7月,由于對于下一個版本應該包括哪些功能,各方分歧太大,爭論過于激進,ECMA開會決定,中止ECMAScript 4.0的開發,將其中涉及現有功能改善的一小部分,發布為ECMAScript3.1,而將其他激進的設想擴大范圍,放入以后的版本,由于會議的氣氛,該版本的項目代號起名為Harmony(和諧)。會后不久,ECMAScript 3.1改名為ECMAScript 5。
2009年12月:完善了ECMASript 3版本、增加"strict mode," (嚴格模式)、以及新的功能,如getter和setter、 JSON庫支持和更完整的對象屬性。ECMAScript 5.0版正式發布。Harmony項目則一分為二,一些較為可行的設想定名為JavaScript.next繼續開發,后來演變成ECMAScript 6;一些不是很成熟的設想,則被視為JavaScript.next.next,在更遠的將來再考慮推出。
2011年06月:ECMAscript 5.1版發布,并且成為ISO國際標準(ISO/IEC 16262:2011)。
2013年3月,ECMAScript 6草案凍結,不再添加新功能。新的功能設想將被放到ECMAScript 7。
2013年12月,ECMAScript 6草案發布。
2015年06月:第六版的名字有很多,可以叫ECMAScript6 (ES6) ,也可以叫ECMAScript 2015 (ES2015) 。
2015年6月17日,ECMAScript 6發布正式版本,即ECMAScript 2015。
2016年06月:也被稱為ECMAScript 2016。完善ES6規范,還包括兩個新的功能:求冪運算符(*) 和array.prototype.includes方法。
2017年06月:增加新的功能,如并發、原子操作、Object.values/Object.entries、 字符串填充、promises、 await/asyn等等。
JavaScript的三個主要組成部分是:ECMAScript(核心),DOM(文檔對象模型),BOM(瀏覽器對象模型)。
【ECMA-262】并沒有參照web瀏覽器,規定了語言的組成部分,其具體內容包括語法、類型、語言、關鍵字、保留字、操作符、對象等。
ECMAScript的兼容:
支持【ECMA-262】描述的所有“類型、值、對象、屬性、函數以及程序語法和語義” 。
支持Unicode字符標準。
添加【ECMA-262】沒有描述的更多“類型、值、對象、屬性和函數”,【ECMA-262】說的這些新增特性,主要是指該標準中沒有規定的新對象和對象的新屬性。
支持【ECMA-262】中沒有定義的“程序和正則表達式的語法”。也就是說可以修改和擴展內置的正則表達式語法。
文檔對象模型(DOM)是針對XML但經過擴展用于HTML的應用程序編程接口(API)。DOM把整個頁面映射為一個多層次節點結構。HTML或者XML頁面中的每個組成部分都是某種類型的節點,這些節點又包含著不同類型的數據。
其實說白了,文檔對象模型(DOM)就是操作網頁上的那些標簽,來實現動態的效果。
在DOM中,頁面一般可以用分層節點圖表示:
DOM級別:
DOM1級于1998年10月成為W3C的推薦標準。BOM1由兩個模塊組成分別是DOM core和DOM HTML。
DOM core:規定如何映射基于XML的文檔結構,以便簡化對文檔中任意部分的訪問和操作。
DOM HTML:在DOM core的基礎上加以擴展,添加了針對HTML的對象和方法。
DOM2級在原來DOM的基礎上有擴充了鼠標和用戶界面事件、范圍、遍歷等細分模塊,通過對象接口增加了對css的支持。包括以下模塊:
DOM Views(DOM視圖):定義了跟蹤不同文檔視圖的接口。
DOM Events(DOM事件):定義了事件與事件處理的接口。
DOM Traversal and Range(DOM遍歷和范圍):定義了遍歷和操作文檔的接口。
DOM3級則進一步擴展了DOM,引入了加載和保存模塊以統一方式加載和保存文檔的方法;新增了DOM驗證模塊主要還是驗證文檔的方法。
瀏覽器對象模型(BOM)是處理瀏覽器窗口和框架,我們習慣上把所有針對瀏覽器的JavaScript擴展算作是BOM的一部分。包括以下:
彈出新瀏覽器窗口的功能。
移動、縮放和關閉瀏覽器窗口的功能。
提供瀏覽器所加載頁面的詳細信息的navigator對象。
提供瀏覽器所加載頁面的詳細信息的location對象。
提供用戶分辨率詳細信息的screen對象。
對cookies的支持。
像XMLHttpRequest和IE的ActionXobject這樣的自定義對象。
瀏覽器對象模型(BOM)其實很簡單,它包含了當前瀏覽器上的一些操作,比如說像關閉按鈕、刷新按鈕、前進和后退按鈕等等。
綜上來說,JavaScript就包含了以上這三部分內容,第一部分就是核心基礎語法,這是非常非常重要的東西,有了核心基礎的鋪墊,我們才能后續的學習文檔對象模型(DOM)和瀏覽器對象模型(BOM)。文檔對象模型(DOM)就是操作一些網頁上的一些標簽元素,來實現網頁上的動態效果。
而瀏覽器對象模型(BOM)就是像比如說滾動的行為,點擊回到頂部,還有刷新,前進,后退等操作。這些特性就是我們需要了解的內容,在你后續進行詳細學習的時候,就帶著這些特性疑問去學習,會有事半功倍的效果。
?微信Android版支持改微信號,淘寶硬核拒絕改名要求;5G 套餐價格松動;Kotlin 1.4 第二個預覽版發布|極客頭條
?跨行成為程序員的 15 個實用技巧!
?程序員擺地攤的正確姿勢!
?全網唯一禿頭數據集:20萬張人像,網羅各類禿頭
?一個神秘URL釀大禍,差點讓我背鍋!
?Uber 前無人駕駛工程師告訴你,國內無人駕駛之路還要走多久?
了面試中侃侃而談、工作中揮“碼”自如,了解 JavaScript 的本質、歷史及局限性是非常有必要的。
JavaScript 的起源
DOM
瀏覽器戰爭
制定標準
一、JavaScript 的起源
JavaScript 是 Netscape 公司與 Sun 公司合作開發的。在 JavaScript 出現之前,網上沖浪越來越流行時,因特網已經無法滿足用戶更大更復雜交互需求,對于開發客戶端腳本的需求也逐漸增大。
那時正處于技術革新最前沿的 Netscape,開始認真考慮開發一種客戶端腳本語言來解決簡單的處理問題。就在 Netscape Navigator 2.0 即將正式發布前,Netscape 將其更名為 JavaScript,目的是為了利用 Java 這個因特網時髦詞匯。Netscape 的賭注最終得到回報,JavaScript 從此變成了因特網的必備組件。
JavaScript 的第一個版本,即JavaScript 1.0版本,出現在 1995 年推出的 Netscape Navigator 2 瀏覽器中。
二、DOM
DOM 就是文檔對象模型(Document Object Model)。簡單地說,DOM 是一套對文檔的內容進行抽象和概念化的方法;它定義了訪問和操作 HTML 文檔的標準方法,將文檔表達為樹結構,如圖:
三、瀏覽器戰爭
Netscape Navigation 4 發布于 1997 年6 月, IE 4 發布于同年 10 月。兩種瀏覽器都對它們的早期版本進行了許多改進,大幅擴展了 DOM,使能夠通過 JavaScript 完成的功能大大增加。
不幸的是,NN 4 和 IE 4 瀏覽器使用的是兩種不兼容的 DOM。
Netscape 公司的 DOM 使用了專有元素,這些元素稱層(layer)。層有唯一的 ID,如:
document.layers['myelement']
而在微軟公司的 DOM 中這個元素必須這樣應用:
document.all['myelement']
這就導致一個可笑的局面:程序員在實際工作中,許多腳本不得不編寫兩次。因此,沒多少,DHTML 就從一個大熱門變成了一個人們不愿提起的名詞。
瀏覽器市場份額大戰中,微軟公司戰勝了 Netscape,因為所有運行 Windows 操作系統的個人電腦都預裝了 IE 瀏覽器。
四、制定標準
就在瀏覽器制造商以 DOM 為武器展開營銷大戰的同時, W3C 不事聲張地結合大家的優點推出一個標準化的 DOM。令人欣慰的是,Netscape、微軟和其他一些瀏覽器制造商們還能拋開彼此的敵意而與 W3C 攜手制定新的標準,并于 1998 年 10 月完成了 “第1級 DOM”(DOM Level 1)
W3C 對 DOM 的定義是:“一個與系統平臺和編程語言無關的接口,程序和腳本可以通過這個接口動態地訪問和修改文檔的內容、結構和樣式。” W3C 推出的標準化 DOM,在獨立性和適用范圍等諸多方面,都遠遠超出了各自為戰的瀏覽器制造商們推出的各種專有 DOM
參考文獻:
1、w3school 在線教程
2、《JavaScript》DOM 編程藝術(第二版)
*請認真填寫需求信息,我們會在24小時內與您取得聯系。