前言:
學習一門編程語言的基本步驟
(01)了解背景知識
1.了解背景知識
1)什么是 JavaScript 語言?
JavaScript 是一種輕量級的腳本語言,所謂“腳本語言”(script language),指的是它不具備開發作業系統的能力,而是只用來撰寫控制其他大型應用程式(比如瀏覽器)的“腳本”,
JavaScript 也是一種嵌入式(embedded)語言,它本身提供的核心語法不算很多,只能用來做一些數學和邏輯運算,JavaScript 本身不提供任何與 I/O(輸入/輸出)相關的 API,都要靠宿主環境(host)提供,所以 JavaScript 只合適嵌入更大型的應用程式環境,去呼叫宿主環境提供的底層 API,
目前,已經嵌入 JavaScript 的宿主環境有多種,最常見的環境就是瀏覽器,另外還有服務器環境,也就是 Node 專案,
從語法角度看,JavaScript 語言是一種“物件模型”語言,各種宿主環境通過這個模型,描述自己的功能和操作介面,從而通過 JavaScript 控制這些功能,但是,JavaScript 并不是純粹的“面向物件語言”,還支持其他編程范式(比如函式式編程),這導致幾乎任何一個問題,JavaScript 都有多種解決方法,閱讀本書的程序中,你會詫異于 JavaScript 語法的靈活性,
JavaScript 的核心語法部分相當精簡,只包括兩個部分:基本的語法構造(比如運算子、控制結構、陳述句)和標準庫(就是一系列具有各種功能的物件比如Array、Date、Math等),除此之外,各種宿主環境提供額外的 API(即只能在該環境使用的介面),以便 JavaScript 呼叫,以瀏覽器為例,它提供的額外 API 可以分成三大類,
瀏覽器控制類:操作瀏覽器
DOM 類:操作網頁的各種元素
Web 類:實作互聯網的各種功能
如果宿主環境是服務器,則會提供各種作業系統的 API,比如檔案操作 API、網路通信 API等等,這些你都可以在 Node 環境中找到,
2)為什么學習 JavaScript?
JavaScript 語言有一些顯著特點,使得它非常值得學習,它既適合作為學習編程的入門語言,也適合當作日常開發的作業語言,它是目前最有希望、前途最光明的計算機語言之一,
2.1)操控瀏覽器的能力
JavaScript 的發明目的,就是作為瀏覽器的內置腳本語言,為網頁開發者提供操控瀏覽器的能力,它是目前唯一一種通用的瀏覽器腳本語言,所有瀏覽器都支持,它可以讓網頁呈現各種特殊效果,為用戶提供良好的互動體驗,
目前,全世界幾乎所有網頁都使用 JavaScript,如果不用,網站的易用性和使用效率將大打折扣,無法成為操作便利、對用戶友好的網站,
對于一個互聯網開發者來說,如果你想提供漂亮的網頁、令用戶滿意的上網體驗、各種基于瀏覽器的便捷功能、前后端之間緊密高效的聯系,JavaScript 是必不可少的工具,
2.2)廣泛的使用領域
近年來,JavaScript 的使用范圍,慢慢超越了瀏覽器,正在向通用的系統語言發展,
(1)瀏覽器的平臺化
隨著 HTML5 的出現,瀏覽器本身的功能越來越強,不再僅僅能瀏覽網頁,而是越來越像一個平臺,JavaScript 因此得以呼叫許多系統功能,比如操作本地檔案、操作圖片、呼叫攝像頭和麥克風等等,這使得 JavaScript 可以完成許多以前無法想象的事情,
(2)Node
Node 專案使得 JavaScript 可以用于開發服務器端的大型專案,網站的前后端都用 JavaScript 開發已經成為了現實,有些嵌入式平臺(Raspberry Pi)能夠安裝 Node,于是 JavaScript 就能為這些平臺開發應用程式,
(3)資料庫操作
JavaScript 甚至也可以用來操作資料庫,NoSQL 資料庫這個概念,本身就是在 JSON(JavaScript Object Notation)格式的基礎上誕生的,大部分 NoSQL 資料庫允許 JavaScript 直接操作,基于 SQL 語言的開源資料庫 PostgreSQL 支持 JavaScript 作為操作語言,可以部分取代 SQL 查詢語言,
(4)移動平臺開發
JavaScript 也正在成為手機應用的開發語言,一般來說,安卓平臺使用 Java 語言開發,iOS 平臺使用 Objective-C 或 Swift 語言開發,許多人正在努力,讓 JavaScript 成為各個平臺的通用開發語言,
PhoneGap 專案就是將 JavaScript 和 HTML5 打包在一個容器之中,使得它能同時在 iOS 和安卓上運行,Facebook 公司的 React Native 專案則是將 JavaScript 寫的組件,編譯成原生組件,從而使它們具備優秀的性能,
Mozilla 基金會的手機作業系統 Firefox OS,更是直接將 JavaScript 作為作業系統的平臺語言,但是很可惜這個專案沒有成功,
(5)內嵌腳本語言
越來越多的應用程式,將 JavaScript 作為內嵌的腳本語言,比如 Adobe 公司的著名 PDF 閱讀器 Acrobat、Linux 桌面環境 GNOME 3,
(6)跨平臺的桌面應用程式
Chromium OS、Windows 8 等作業系統直接支持 JavaScript 撰寫應用程式,Mozilla 的 Open Web Apps 專案、Google 的 Chrome App 專案、GitHub 的 Electron 專案、以及 TideSDK 專案,都可以用來撰寫運行于 Windows、Mac OS 和 Android 等多個桌面平臺的程式,不依賴瀏覽器,
(7)小結
可以預期,JavaScript 最終將能讓你只用一種語言,就開發出適應不同平臺(包括桌面端、服務器端、手機端)的程式,早在2013年9月的統計之中,JavaScript 就是當年 GitHub 上使用量排名第一的語言,
著名程式員 Jeff Atwood 甚至提出了一條 “Atwood 定律”:
“所有可以用 JavaScript 撰寫的程式,最終都會出現 JavaScript 的版本,”(Any application that can be written in JavaScript will eventually be written in JavaScript.)
2.3)易學性
相比學習其他語言,學習 JavaScript 有一些有利條件,
(1)學習環境無處不在
只要有瀏覽器,就能運行 JavaScript 程式;只要有文本編輯器,就能撰寫 JavaScript 程式,這意味著,幾乎所有電腦都原生提供 JavaScript 學習環境,不用另行安裝復雜的 IDE(集成開發環境)和編譯器,
(2)簡單性
相比其他腳本語言(比如 Python 或 Ruby),JavaScript 的語法相對簡單一些,本身的語法特性并不是特別多,而且,那些語法中的復雜部分,也不是必需要學會,你完全可以只用簡單命令,完成大部分的操作,
(3)與主流語言的相似性
JavaScript 的語法很類似 C/C++ 和 Java,如果學過這些語言(事實上大多數學校都教),JavaScript 的入門會非常容易,
必須說明的是,雖然核心語法不難,但是 JavaScript 的復雜性體現在另外兩個方面,
首先,它涉及大量的外部 API,JavaScript 要發揮作用,必須與其他組件配合,這些外部組件五花八門,數量極其龐大,幾乎涉及網路應用的各個方面,掌握它們絕非易事,
其次,JavaScript 語言有一些設計缺陷,某些地方相當不合理,另一些地方則會出現怪異的運行結果,學習 JavaScript,很大一部分時間是用來搞清楚哪些地方有陷阱,Douglas Crockford 寫過一本有名的書,名字就叫《JavaScript: The Good Parts》,言下之意就是這門語言不好的地方很多,必須寫一本書才能講清楚,另外一些程式員則感到,為了更合理地撰寫 JavaScript 程式,就不能用 JavaScript 來寫,而必須發明新的語言,比如 CoffeeScript、TypeScript、Dart 這些新語言的發明目的,多多少少都有這個因素,
盡管如此,目前看來,JavaScript 的地位還是無法動搖,加之,語言標準的快速進化,使得 JavaScript 功能日益增強,而語法缺陷和怪異之處得到了彌補,所以,JavaScript 還是值得學習,況且它的入門真的不難,
2.4)強大的性能
JavaScript 的性能優勢體現在以下方面,
(1)靈活的語法,表達力強,
JavaScript 既支持類似 C 語言清晰的程序式編程,也支持靈活的函式式編程,可以用來寫并發處理(concurrent),這些語法特性已經被證明非常強大,可以用于許多場合,尤其適用異步編程,
JavaScript 的所有值都是物件,這為程式員提供了靈活性和便利性,因為你可以很方便地、按照需要隨時創造資料結構,不用進行麻煩的預定義,
JavaScript 的標準還在快速進化中,并不斷合理化,添加更適用的語法特性,
(2)支持編譯運行,
JavaScript 語言本身,雖然是一種解釋型語言,但是在現代瀏覽器中,JavaScript 都是編譯后運行,程式會被高度優化,運行效率接近二進制程式,而且,JavaScript 引擎正在快速發展,性能將越來越好,
此外,還有一種 WebAssembly 格式,它是 JavaScript 引擎的中間碼格式,全部都是二進制代碼,由于跳過了編譯步驟,可以達到接近原生二進制代碼的運行速度,各種語言(主要是 C 和 C++)通過編譯成 WebAssembly,就可以在瀏覽器里面運行,
(3)事件驅動和非阻塞式設計,
JavaScript 程式可以采用事件驅動(event-driven)和非阻塞式(non-blocking)設計,在服務器端適合高并發環境,普通的硬體就可以承受很大的訪問量
2.5)開放性
JavaScript 是一種開放的語言,它的標準 ECMA-262 是 ISO 國際標準,寫得非常詳盡明確;該標準的主要實作(比如 V8 和 SpiderMonkey 引擎)都是開放的,而且質量很高,這保證了這門語言不屬于任何公司或個人,不存在著作權和專利的問題,
語言標準由 TC39 委員會負責制定,該委員會的運作是透明的,所有討論都是開放的,會議記錄都會對外公布,
不同公司的 JavaScript 運行環境,兼容性很好,程式不做調整或只做很小的調整,就能在所有瀏覽器上運行,
3)JavaScript語言的誕生
JavaScript 因為互聯網而生,緊跟著瀏覽器的出現而問世,回顧它的歷史,就要從瀏覽器的歷史講起,
1990年底,歐洲核能研究組織(CERN)科學家 Tim Berners-Lee,在全世界最大的電腦網路——互聯網的基礎上,發明了萬維網(World Wide Web),從此可以在網上瀏覽網頁檔案,最早的網頁只能在作業系統的終端里瀏覽,也就是說只能使用命令列操作,網頁都是在字符視窗中顯示,這當然非常不方便,
1992年底,美國國家超級電腦應用中心(NCSA)開始開發一個獨立的瀏覽器,叫做 Mosaic,這是人類歷史上第一個瀏覽器,從此網頁可以在圖形界面的視窗瀏覽,
1994年10月,NCSA 的一個主要程式員 Marc Andreessen 聯合風險投資家 Jim Clark,成立了 Mosaic 通信公司(Mosaic Communications),不久后改名為 Netscape,這家公司的方向,就是在 Mosaic 的基礎上,開發面向普通用戶的新一代的瀏覽器 Netscape Navigator,
1994年12月,Navigator 發布了1.0版,市場份額一舉超過90%,
Netscape 公司很快發現,Navigator 瀏覽器需要一種可以嵌入網頁的腳本語言,用來控制瀏覽器行為,當時,網速很慢而且上網費很貴,有些操作不宜在服務器端完成,比如,如果用戶忘記填寫“用戶名”,就點了“發送”按鈕,到服務器再發現這一點就有點太晚了,最好能在用戶發出資料之前,就告訴用戶“請填寫用戶名”,這就需要在網頁中嵌入小程式,讓瀏覽器檢查每一欄是否都填寫了,
管理層對這種瀏覽器腳本語言的設想是:功能不需要太強,語法較為簡單,容易學習和部署,那一年,正逢 Sun 公司的 Java 語言問世,市場推廣活動非常成功,Netscape 公司決定與 Sun 公司合作,瀏覽器支持嵌入 Java 小程式(后來稱為 Java applet),但是,瀏覽器腳本語言是否就選用 Java,則存在爭論,后來,還是決定不使用 Java,因為網頁小程式不需要 Java 這么“重”的語法,但是,同時也決定腳本語言的語法要接近 Java,并且可以支持 Java 程式,這些設想直接排除了使用現存語言,比如 Perl、Python 和 TCL,
1995年,Netscape 公司雇傭了程式員 Brendan Eich 開發這種網頁腳本語言,Brendan Eich 有很強的函式式編程背景,希望以 Scheme 語言(函式式語言鼻祖 LISP 語言的一種方言)為藍本,實作這種新語言,
1995年5月,Brendan Eich 只用了10天,就設計完成了這種語言的第一版,它是一個大雜燴,語法有多個來源,
基本語法:借鑒 C 語言和 Java 語言,
資料結構:借鑒 Java 語言,包括將值分成原始值和物件兩大類,
函式的用法:借鑒 Scheme 語言和 Awk 語言,將函式當作第一等公民,并引入閉包,
原型繼承模型:借鑒 Self 語言(Smalltalk 的一種變種),
正則運算式:借鑒 Perl 語言,
字串和陣列處理:借鑒 Python 語言,
為了保持簡單,這種腳本語言缺少一些關鍵的功能,比如塊級作用域、模塊、子型別(subtyping)等等,但是可以利用現有功能找出解決辦法,這種功能的不足,直接導致了后來 JavaScript 的一個顯著特點:對于其他語言,你需要學習語言的各種功能,而對于 JavaScript,你常常需要學習各種解決問題的模式,而且由于來源多樣,從一開始就注定,JavaScript 的編程風格是函式式編程和面向物件編程的一種混合體,
Netscape 公司的這種瀏覽器腳本語言,最初名字叫做 Mocha,1995年9月改為 LiveScript,12月,Netscape 公司與 Sun 公司(Java 語言的發明者和所有者)達成協議,后者允許將這種語言叫做 JavaScript,這樣一來,Netscape 公司可以借助 Java 語言的聲勢,而 Sun 公司則將自己的影響力擴展到了瀏覽器,
之所以起這個名字,并不是因為 JavaScript 本身與 Java 語言有多么深的關系(事實上,兩者關系并不深,詳見下節),而是因為 Netscape 公司已經決定,使用 Java 語言開發網路應用程式,JavaScript 可以像膠水一樣,將各個部分連接起來,當然,后來的歷史是 Java 語言的瀏覽器插件失敗了,JavaScript 反而發揚光大,
1995年12月4日,Netscape 公司與 Sun 公司聯合發布了 JavaScript 語言,對外宣傳 JavaScript 是 Java 的補充,屬于輕量級的 Java,專門用來操作網頁,
1996年3月,Navigator 2.0 瀏覽器正式內置了 JavaScript 腳本語言,
3.1)JavaScript 與 Java 的關系
這里專門說一下 JavaScript 和 Java 的關系,它們是兩種不一樣的語言,但是彼此存在聯系,
JavaScript 的基本語法和物件體系,是模仿 Java 而設計的,但是,JavaScript 沒有采用 Java 的靜態型別,正是因為 JavaScript 與 Java 有很大的相似性,所以這門語言才從一開始的 LiveScript 改名為 JavaScript,基本上,JavaScript 這個名字的原意是“很像Java的腳本語言”,
JavaScript 語言的函式是一種獨立的資料型別,以及采用基于原型物件(prototype)的繼承鏈,這是它與 Java 語法最大的兩點區別,JavaScript 語法要比 Java 自由得多,
另外,Java 語言需要編譯,而 JavaScript 語言則是運行時由解釋器直接執行,
總之,JavaScript 的原始設計目標是一種小型的、簡單的動態語言,與 Java 有足夠的相似性,使得使用者(尤其是 Java 程式員)可以快速上手,
3.2)JavaScript 與 ECMAScript 的關系
1996年8月,微軟模仿 JavaScript 開發了一種相近的語言,取名為JScript(JavaScript 是 Netscape 的注冊商標,微軟不能用),首先內置于IE 3.0,Netscape 公司面臨喪失瀏覽器腳本語言的主導權的局面,
1996年11月,Netscape 公司決定將 JavaScript 提交給國際標準化組織 ECMA(European Computer Manufacturers Association),希望 JavaScript 能夠成為國際標準,以此抵抗微軟,ECMA 的39號技術委員會(Technical Committee 39)負責制定和審核這個標準,成員由業內的大公司派出的工程師組成,目前共25個人,該委員會定期開會,所有的郵件討論和會議記錄,都是公開的,
1997年7月,ECMA 組織發布262號標準檔案(ECMA-262)的第一版,規定了瀏覽器腳本語言的標準,并將這種語言稱為 ECMAScript,這個版本就是 ECMAScript 1.0 版,之所以不叫 JavaScript,一方面是由于商標的關系,Java 是 Sun 公司的商標,根據一份授權協議,只有 Netscape 公司可以合法地使用 JavaScript 這個名字,且 JavaScript 已經被 Netscape 公司注冊為商標,另一方面也是想體現這門語言的制定者是 ECMA,不是 Netscape,這樣有利于保證這門語言的開放性和中立性,因此, ECMAScript 和 JavaScript 的關系是,前者是后者的規格,后者是前者的一種實作,在日常場合,這兩個詞是可以互換的,
ECMAScript 只用來標準化 JavaScript 這種語言的基本語法結構,與部署環境相關的標準都由其他標準規定,比如 DOM 的標準就是由 W3C組織(World Wide Web Consortium)制定的,
ECMA-262 標準后來也被另一個國際標準化組織 ISO(International Organization for Standardization)批準,標準號是 ISO-16262,
3.3)JavaScript 的版本
1997年7月,ECMAScript 1.0發布,
1998年6月,ECMAScript 2.0版發布,
1999年12月,ECMAScript 3.0版發布,成為 JavaScript 的通行標準,得到了廣泛支持,
2007年10月,ECMAScript 4.0版草案發布,對3.0版做了大幅升級,預計次年8月發布正式版本,草案發布后,由于4.0版的目標過于激進,各方對于是否通過這個標準,發生了嚴重分歧,以 Yahoo、Microsoft、Google 為首的大公司,反對 JavaScript 的大幅升級,主張小幅改動;以 JavaScript 創造者 Brendan Eich 為首的 Mozilla 公司,則堅持當前的草案,
2008年7月,由于對于下一個版本應該包括哪些功能,各方分歧太大,爭論過于激進,ECMA 開會決定,中止 ECMAScript 4.0 的開發(即廢除了這個版本),將其中涉及現有功能改善的一小部分,發布為 ECMAScript 3.1,而將其他激進的設想擴大范圍,放入以后的版本,由于會議的氣氛,該版本的專案代號起名為 Harmony(和諧),會后不久,ECMAScript 3.1 就改名為 ECMAScript 5,
2009年12月,ECMAScript 5.0版 正式發布,Harmony 專案則一分為二,一些較為可行的設想定名為 JavaScript.next 繼續開發,后來演變成 ECMAScript 6;一些不是很成熟的設想,則被視為 JavaScript.next.next,在更遠的將來再考慮推出,TC39 的總體考慮是,ECMAScript 5 與 ECMAScript 3 基本保持兼容,較大的語法修正和新功能加入,將由 JavaScript.next 完成,當時,JavaScript.next 指的是ECMAScript 6,第六版發布以后,將指 ECMAScript 7,TC39 預計,ECMAScript 5 會在2013年的年中成為 JavaScript 開發的主流標準,并在此后五年中一直保持這個位置,
2011年6月,ECMAScript 5.1版發布,并且成為 ISO 國際標準(ISO/IEC 16262:2011),到了2012年底,所有主要瀏覽器都支持 ECMAScript 5.1版的全部功能,
2013年3月,ECMAScript 6 草案凍結,不再添加新功能,新的功能設想將被放到 ECMAScript 7,
2013年12月,ECMAScript 6 草案發布,然后是12個月的討論期,聽取各方反饋,
2015年6月,ECMAScript 6 正式發布,并且更名為“ECMAScript 2015”,這是因為 TC39 委員會計劃,以后每年發布一個 ECMAScript 的版本,下一個版本在2016年發布,稱為“ECMAScript 2016”,2017年發布“ECMAScript 2017”,以此類推,
文章來源:https://wangdoc.com/javascript/basic/index.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/150300.html
標籤:JavaScript
上一篇:koa中間執行機制
下一篇:宣傳頁專案開發(三)
