淺習一波 JavaScript 高階程式設計(第4版)p1

語言: CN / TW / HK

theme: smartblue

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第1天,點選檢視活動詳情


JavaScript 高階程式設計第 4 版(後簡稱高程4),相較於第 3 版,增加了 ES6 至 ES10 的全新內容,刪除了舊版過時的內容,並在原有基礎上充實了更加翔實的內容。

中文譯版於 2020 年發售,妥妥的“新鮮出爐”,你要是問本瓜:當今學 JavaScript 哪家強,我只能說:紅寶書第 4 版最在行。

於是乎,藉著更文契機,本瓜將開啟一個小系列,帶你重看一遍高階程式設計4(先前只是跳著跳著看),將抽取精華,用最簡單的話解釋核心點、儘量把握全域性、快速過一遍的同時,記錄與工友們分享~~

正文

1995 年,作為 JavaScript 的創作者,Brendan Eich 絕對想不到,他僅用 10 天寫出的指令碼語言,竟然在 25 年以後,連續 10 年蟬聯“最常用程式語言”榜首。

很多人還以刻板的印象認為 JavaScript 是“玩具語言”,但隨著它的不斷髮展,而今它絕對是最有必要學習的一門程式語言。JavaScript 有著強大的語言特性,對於網頁和移動開發者來說,深入理解尤為必要。

在第一章 《什麼是 JavaScript》很詳細的闡述了 JavaScript 演進歷史,這裡用箭頭符號簡單說明過程:

言而總之,就是網景瀏覽器與IE瀏覽器大戰,最終促成了 ECMAScript 的誕生。

有意思的是,本瓜之前理解:JavaScript 包含三個部分,ECMAScript + DOM + BOM,這裡也確實這樣畫了一張圖,

image.png

但這種包含的理解應該是錯誤的;語言是實現標準,而不是包含標準;其它語言也可以實現這些標準,比如 Adobe ActionScript 同樣也實現了 ECMAScript ;

所以,應該說:JavaScript 實現了 ECMAScript 標準,同時還實現了 DOM 和 BOM。

那 ECMAScript(ecma-262)到底定義了什麼?要點如下:

  1. 語法
  2. 型別
  3. 語句
  4. 關鍵字
  5. 保留字
  6. 操作符
  7. 全域性物件

CV 一個歷史版本及主要釋出特性:

| 版本 | 發表日期 | 與前版本的差異 | | --- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | 1997年6月 | 首版 | | 2 | 1998年6月 | 格式修正,以使得其形式與ISO/IEC16262國際標準一致 | | 3 | 1999年12月 | 強大的正則表示式,更好的詞法作用域鏈處理,新的控制指令,異常處理,錯誤定義更加明確,資料輸出的格式化及其它改變 | | 4 | 放棄 | 由於關於語言的複雜性出現分歧,第4版本被放棄,其中的部分成為了第5版本及Harmony的基礎;由ActionScript實現 | | 5 | 2009年12月 | 新增“嚴格模式(strict mode)”,一個子集用作提供更徹底的錯誤檢查,以避免結構出錯。澄清了許多第3版本的模糊規範,並適應了與規範不一致的真實世界實現的行為。增加了部分新功能,如getters及setters,支援JSON以及在物件屬性上更完整的反射 | | 5.1 | 2011年6月 | ECMAScript標5.1版形式上完全一致於國際標準ISO/IEC 16262:2011。 | | 6 | 2015年6月 | ECMAScript 2015(ES2015),第 6 版,最早被稱作是 ECMAScript 6(ES6),添加了類和模組的語法,其他特性包括迭代器,Python風格的生成器和生成器表示式,箭頭函式,二進位制資料,靜態型別陣列,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作為最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。 | | 7 | 2016年6月 | ECMAScript 2016(ES2016),第 7 版,多個新的概念和語言特性 | | 8 | 2017年6月 | ECMAScript 2017(ES2017),第 8 版,多個新的概念和語言特性 | | 9 | 2018年6月 | ECMAScript 2018 (ES2018),第 9 版,包含了非同步迴圈,生成器,新的正則表示式特性和 rest/spread 語法。 | | 10 | 2019年6月 | ECMAScript 2019 (ES2019),第 10 版 | | 11 | 2020年6月 | ECMAScript 2020 (ES2020),第 11 版 |

介紹了下 ECMAScript ,然後就來到我們熟悉的 DOM:Document Object Model;

DOM 將整個頁面抽象為一組分層節點。使用 DOM API,可以輕鬆地刪除、新增、替換、修改節點。讓開發者可以隨心所欲地控制網頁的內容和結構。

DOM 歷史上,有 4 個版本:

| 版本 | 特性 | | -------------------------------- | ------------------------------ | | DOM Level 1 | 對映文件結構 | | DOM Level 2 | 增加了對滑鼠和使用者介面事件、範圍、遍歷、層疊樣式表(CSS) | | DOM Level 3 | 增加以統一的方式載入和儲存文件的方法 | | DOM Living Standard(DOM Level 4) | 包括 Mutation Observers |

咱就是,不得不感慨,這些版本的歷史迭代是導致前端難學的原因之一 QAQ

接著行文來到 BOM —— 瀏覽器物件模型,我們也很熟悉,它提供的能力是關於瀏覽器的:

  1. 彈出新瀏覽器視窗的能力;
  2. 移動、縮放和關閉瀏覽器視窗的能力;
  3. navigator 物件,提供關於瀏覽器的詳盡資訊;
  4. location 物件,提供瀏覽器載入頁面的詳盡資訊;
  5. screen 物件,提供關於使用者螢幕解析度的詳盡資訊;
  6. performance 物件,提供瀏覽器記憶體佔用、導航行為和時間統計的詳盡資訊;
  7. 對 cookie 的支援;
  8. 其他自定義物件,如 XMLHttpRequest 和 IE 的 ActiveXObject。

其實在 HTML5 之前,各大瀏覽器對於 BOM 的實現是不一樣的,HTML5 改善了這一困境。

小結

小結一句吧:

有人問:學習 JavaScript 有必要了解它的歷史嗎?本瓜覺得是必要的。瞭解後,也會發現:還挺有意思的~~

這裡覺得有點遺憾的是,關於:JavaScript的語言設計主要受到了Self(一種基於原型的程式語言)和 Scheme(一門函數語言程式設計語言)的影響,在語法結構上它又與C語言相似,高程4 裡並沒有展開說明,如果能針對這部分歷史展開講講,就更 nice 了!!

OK,以上便是本篇分享。 覺得不錯點個贊吧👍👍👍,您的鼓勵,我的動力,堅持輸出質量好文~~ 歡迎評論留言 我是掘金安東尼,輸出暴露輸入,技術洞見生活。再會吧~~ 👋👋👋