上文咱們講到了 ECMAScript 標準的制定,各個瀏覽器廠商依據標準實現 JavaScript,可是事情到這裏還沒結束,能夠說 ECMAScript 標準的制定只是 JavaScript 的起點。還沒看到上篇文章的同窗歡迎點擊連接。html
有不少同窗有這樣的問題,既然 JavaScript 是基於 ECMAScript 實現的,那麼兩者有什麼區別呢?雖然現在 JavaScript 和 ECMAScript 經常被人們用來表示相同的含義,可是 JavaScript 的真正含義比 ECMAScript 中規定的多,完整的 JavaScript 實際上是由三個不一樣的部分組成的:程序員
ECMA-262所定義的 ECMAScript 只是描述了這門語言的基礎,包括如下這些內容:編程
ECMAScript 定義的這些內容與實現的宿主平臺沒有關係,不論是在 Web 瀏覽器上仍是在大名鼎鼎的 Node 上,咱們能夠看到基本的語法都是類似的,不一樣的是在 Web 瀏覽器上可使用操做網頁內容的 DOM 的接口,而在 Node 上可使用操做系統和文件系統的接口。ECMAScript 只是提供了一個基礎,在這個基礎上能夠構建更加一個更加完善的環境(好比 JavaScript 和 Node)。瀏覽器
ECMAScript 1.0 在 1997 年發佈,至今已通過去了很長的一段時間了,在這麼長的時間裏,ECMAScript 也更新了許屢次版本,在這些版本中,有那麼一個版本你必定曾有所耳聞,無論你是否是前端工程師,無論你是否使用 JavaScript。是哪一個版本呢?就是你們常說的 ES6,它的全稱是 ECMAScript 6.0。常常看到有同窗疑惑 ES2015 和 ES6 是什麼關係?實際上是這樣的,由於 ES6 是在 2015 年發佈的,又被稱爲 ES2015,因此 ES2015 和 ES6 實際上是同一個東西。固然 ES6 也不是最後一個版本,最新發布的版本已經到了 2019 年發佈的 ES10。bash
講完了 ECMAScript 咱們來接着講講 DOM 吧。DOM 的全稱是 Document Object Model,即文檔對象模型。DOM 是 XML 和 HTML 文檔的編程接口,它提供了對文檔的結構化描述,定義了一種方式使得腳本程序能夠對該結構進行訪問和操做,從而改變真實頁面的結構、樣式以及內容。DOM 能夠將整個頁面文檔解析成爲一個由節點和對象組成的結構體,好比下面這個 HTML 文檔:服務器
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
複製代碼
通過映射爲 DOM 以後,這個 HTML 頁面對應的 DOM 結構以下圖所示:cookie
DOM 的出現是爲了保持 Web 跨平臺的能力,在 DHTML(Dynamic HTML,動態HTML) 出現後,頁面能夠支持直接在客戶端進行 HTML 文檔的更新,而不須要每次更新都到服務器上獲取 HTML,頁面不須要從新加載,可是因爲 Netscape 和微軟對於 DHTML 的開發各自有想法,這樣下去平臺的差別性愈來愈大,會致使程序難以兼容多個平臺,此時負責制定 Web 通訊標準的 W3C(World Wide Web Consortium,萬維網聯盟)站了出來,開始着手進行 DOM 標準的制定,程序員終於再一次獲得了拯救。前端工程師
DOM 標準分爲幾個級別:app
BOM 指的是 Browser Object Model,瀏覽器對象模型,它是瀏覽器窗口的一個抽象,使用 BOM 能夠支持對瀏覽器窗口的控制,常見的有這樣的一些功能是由 BOM 提供的:
這篇文章中咱們一步步梳理了 JavaScript 誕生的全過程,首先 Netscape 的布蘭登·艾奇設計出 LiveScript,與 Sun 公司合做並搭上 Java 的順風車,把 LiveScript 更名爲 JavaScript,並在 1995 年第一次進行了發佈並取得了巨大的成功。而後因爲微軟的攪局,發佈了 JScript,兩個 JavaScript 的同時存在,致使了差別,不得不制定一個關於 JavaScript 的標準,因而 ECMAScript 在 1997 年誕生了。JavaScript 基於 ECMAScript 進行實現,但又不止於此,還包含了許多 ECMAScript 中沒有描述的內容,如 DOM 和 BOM 等,這些都進一步的豐富了 JavaScript的內涵,使它成爲了一門更加完善和強大的腳本語言,受到了全世界開發者的熱捧。最後引用大神的一句話:
Atwood's Law: Any application that can be written in JavaScript, will eventually be written in JavaScript. (一切能用 JavaScript 實現的,最終都會使用 JavaScript 實現。)