《JavaScript 闖關(guān)記》之簡介

JavaScript 是面向 Web 的編程語言,絕大多數(shù)現(xiàn)代網(wǎng)站都使用了 JavaScript,并且所有的現(xiàn)代 Web 瀏覽器(電腦,手機(jī),平板)均包含了 JavaScript 解釋器。 這使得 JavaScript 能夠稱得上史上使用最廣泛的編程語言。 JavaScript 也是前端開發(fā)工程師必須掌握的三種技能之一:描述網(wǎng)頁內(nèi)容的 HTML、描述網(wǎng)頁樣式的 CSS、以及描述網(wǎng)頁行為的 JavaScript。

JavaScript 是一門 動態(tài)的、弱類型的、面向?qū)ο蟮摹⒔忉屝偷?/strong> 編程語言,非常適合面向?qū)ο蠛秃瘮?shù)式的編程風(fēng)格。JavaScript 的語法來自于 Java,它的一等函數(shù)(first-class function)來自于 Scheme,它的基于原型(prototype-based)的繼承來自于 Self。但學(xué)習(xí)本課程不必去了解那些(Java/Scheme/Slef)語言或熟悉那些術(shù)語。

JavaScript 起源

時間:1995年

人物:Brendan Eich(布蘭登·艾奇)

背景:那個時候,絕大多數(shù)因特網(wǎng)用戶都是用速度僅為28.8kbit/s的「貓」上網(wǎng),為了完成簡單的表單驗(yàn)證,必須把表單數(shù)據(jù)發(fā)送到服務(wù)器端才能確定用戶是否沒有填寫某個必填域、是否輸入了無效的值,每次操作需等待30秒以上才會有結(jié)果,這無疑是在慢性自殺。

事件:當(dāng)時走在技術(shù)革新最前沿的 Netscape 公司指派 Brendan Eich 開發(fā)一種客戶端語言,用來處理這種簡單的驗(yàn)證,它就是 JavaScript。JavaScript 原名 LiveScript,Netscape 為了搭上媒體熱炒 Java 的順風(fēng)車,才把 LiveScript 改名為 JavaScript。(所以 Java 和 JavaScript 的關(guān)系,就相當(dāng)于雷鋒和雷峰塔的關(guān)系。)

自此以后,JavaScript 逐漸成為市面上常見瀏覽器必備的一項(xiàng)特色功能。如今,JavaScript 的用途早已不再局限于簡單的數(shù)據(jù)驗(yàn)證,而是具備了與瀏覽器窗口及其內(nèi)容等幾乎所有方面交互的能力。今天的 JavaScript 已經(jīng)成為一門功能全面的編程語言,能夠處理復(fù)雜的計(jì)算和交互,擁有了閉包、匿名(lambda,拉姆達(dá))函數(shù),甚至元編程等特性。

JavaScript 從一個簡單的輸入驗(yàn)證器發(fā)展成為一門強(qiáng)大的編程語言,完全出乎人們的意料。應(yīng)該說,它既是一門非常簡單的語言,又是一門非常復(fù)雜的語言。說它簡單,是因?yàn)閷W(xué)會使用它只需片刻功夫;而說它復(fù)雜,是因?yàn)橐嬲莆账鼊t需要數(shù)年時間。

JavaScript 實(shí)現(xiàn)

隨著 JavaScript 的普及,微軟公司在 IE 瀏覽器中也加入了名為 JScript 的 JavaScript 實(shí)現(xiàn),由于沒有標(biāo)準(zhǔn)規(guī)定 JavaScript 的語法和特性,導(dǎo)致市面上存在多個版本的 JavaScript 實(shí)現(xiàn),且互不兼容,因此 JavaScript 標(biāo)準(zhǔn)化問題被提上了議事日程。

1997年,歐洲計(jì)算機(jī)制造商協(xié)會(ECMA,European Computer Manufactures Association)定義了名為ECMAScript(發(fā)音為 ek-ma-script)的腳本語言標(biāo)準(zhǔn),它是通用的,與平臺無關(guān)的語言標(biāo)準(zhǔn)。自此以后,瀏覽器開發(fā)商開始致力于將 ECMAScript 作為各自 JavaScript 實(shí)現(xiàn)的基礎(chǔ)。雖然基礎(chǔ)相同,但具體實(shí)現(xiàn)在不同瀏覽器上卻略有差異。

JavaScript 和 ECMAScript 通常被人們用來表達(dá)相同的含義,但 JavaScript 的含義卻比 ECMAScript 中規(guī)定的要多得多。一個完整的 JavaScript 實(shí)現(xiàn)應(yīng)該由下面三個不同的部分組成。

  • 核心(ECMAScript)
  • 文檔對象模型(DOM)
  • 瀏覽器對象模型(BOM)

核心(ECMAScript)

ECMAScript 標(biāo)準(zhǔn)由 語法、數(shù)據(jù)類型、語句、關(guān)鍵字、保留字、運(yùn)算符、對象 組成。它與 Web 瀏覽器沒有任何依賴關(guān)系,并且這門語言本身并不包含輸入和輸出定義。ECMAScript 定義的只是這門語言的基礎(chǔ),而在此基礎(chǔ)之上可以構(gòu)建更完善的腳本語言。

Web 瀏覽器只是 ECMAScript 實(shí)現(xiàn)的宿主環(huán)境之一,其他宿主環(huán)境包括 Node 和 Adobe Flash。宿主環(huán)境不僅提供基本的 ECMAScript 實(shí)現(xiàn),同時也會提供該語言的擴(kuò)展(例如:DOM、BOM),這些擴(kuò)展則利用 ECMAScript 的核心類型和語法提供更多更具體的功能。

JavaScript 是 Web 瀏覽器對 ECMAScript 標(biāo)準(zhǔn)的實(shí)現(xiàn),ActionScript 是 Adobe Flash 對 ECMAScript 標(biāo)準(zhǔn)的實(shí)現(xiàn)。

ECMAScript 歷史

1997年,ECMAScript 1版發(fā)布。

1998年6月,ECMAScript 2版發(fā)布。

1999年12月,ECMAScript 3版發(fā)布。

2000年,ECMAScript 4開始醞釀,最終這個版本沒有通過。

2009年12月,ECMAScript 5版發(fā)布。

2011年6月,ECMAscript 5.1版發(fā)布,成為國際標(biāo)準(zhǔn)。

2015年6月,ECMAScript 6正式通過,成為國際標(biāo)準(zhǔn)。

擴(kuò)展閱讀「阮一峰 的《ECMAScript 6 入門》」
http://es6.ruanyifeng.com/#docs/intro

3.0版是一個巨大的成功,在業(yè)界得到廣泛支持,成為通行標(biāo)準(zhǔn),奠定了 JavaScript 語言的基本語法,以后的版本完全繼承。直到今天,初學(xué)者一開始學(xué)習(xí) JavaScript,其實(shí)就是在學(xué)3.0版的語法。

文檔對象模型(DOM)

文檔對象模型(DOM,Document Object Model)是用于 HTML 的應(yīng)用程序編程接口(API),它把整個頁面映射為一個多層節(jié)點(diǎn)結(jié)構(gòu)。HTML 頁面中的每個組成部分都是某種類型的節(jié)點(diǎn),這些節(jié)點(diǎn)又包含著不同類型的數(shù)據(jù)。看下面這個 HTML 頁面:

<html>
    <head>
        <title>Sample Page</title>
    </head>
    <body>
        <p>Hello World!</p>
    </body>
</html>

通過 DOM 創(chuàng)建的這個表示文檔的樹形圖,開發(fā)人員獲得了控制頁面內(nèi)容和結(jié)構(gòu)的主動權(quán)。借助 DOM 提供的 API,開發(fā)人員可以輕松自如地刪除、添加、替換或修改任何節(jié)點(diǎn)。

由于 Netscape 和 微軟實(shí)現(xiàn)的 DOM 互不兼容,負(fù)責(zé)制定 Web 通信標(biāo)準(zhǔn)的 W3C(World Wide Web Consortium,萬維網(wǎng)聯(lián)盟)開始著手規(guī)劃 DOM。

DOM 1級:

  • DOM 核心:映射文檔結(jié)構(gòu),簡化對文檔中任意部分的操作和訪問。
  • DOM HTML:在 DOM 核心的基礎(chǔ)上,添加了針對 HTML 的對象和方法。

DOM 2級:

  • DOM 視圖:定義了跟蹤不同文檔視圖的接口。
  • DOM 事件:定義了事件和事件處理的接口。
  • DOM 樣式:定義了基于 CSS 為元素應(yīng)用樣式的接口。
  • DOM 遍歷和范圍:定義了遍歷和操作文檔樹的接口。

DOM 3級:

  • DOM 加載和保存:引入了以統(tǒng)一方式加載和保存文檔的方法。
  • DOM 驗(yàn)證:新增了驗(yàn)證文檔的方法。
  • DOM 核心擴(kuò)展。

注意:

  1. DOM 并不是只針對 JavaScript 的,很多別的語言也都實(shí)現(xiàn)了 DOM。
  2. DOM 0級標(biāo)準(zhǔn)是不存在的,它只是 DOM 歷史坐標(biāo)中的一個參照點(diǎn)而已。

瀏覽器對象模型(BOM)

瀏覽器對象模型(BOM,Browser Object Model)是用于瀏覽器的應(yīng)用程序編程接口(API),它把整個瀏覽器窗口映射為一個對象。從根本上講,BOM 只處理瀏覽器窗口和框架,但人們習(xí)慣上也把所有針對瀏覽器的 JavaScript 擴(kuò)展算作 BOM 的一部分,例如:

  • 彈出新瀏覽器窗口的功能。
  • 移動、縮放和關(guān)閉瀏覽器窗口的功能。
  • 提供瀏覽器詳細(xì)信息的 navigator 對象。
  • 提供瀏覽器所加載頁面的詳細(xì)信息的 localtion 對象。
  • 提供用戶顯示器分辨率詳細(xì)信息的 screen 對象。
  • 對 cookies 的支持。
  • XMLHttpRequest 和 IE 的 ActiveXObject 這樣的自定義對象。

BOM 最讓人頭疼的是沒有相關(guān)的規(guī)范和標(biāo)準(zhǔn),每個瀏覽器都有獨(dú)有的實(shí)現(xiàn),這個問題在 HTML5 中得到了解決,HTML5 致力于把很多 BOM 功能寫入正式規(guī)范。

小結(jié)

JavaScript 是一種專為網(wǎng)頁交互而設(shè)計(jì)的腳本語言,由下列3個不同的部分組成:

  • 核心(ECMAScript),由 ECMA-262 定義,提供核心語言功能。
  • 文檔對象模型(DOM),提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口。
  • 瀏覽器對象模型(BOM),提供與瀏覽器交互的方法和接口。

JavaScript 的這3個組成部分,在當(dāng)前5個主要瀏覽器(IE、FireFox、Chrome、Safari 和 Opera)中都得到了不同程度的支持。其中,所有瀏覽器對 ECMAScript 3 版本的支持大體上都還不錯,而對 ECMAScript 5 的支持程度越來越高,但對 DOM 的支持則彼此相差比較多。對于已經(jīng)正式納入 HTML5 標(biāo)準(zhǔn)的 BOM 來說,盡管各瀏覽器都實(shí)現(xiàn)了某些眾所周知的共同特性,但其他特性還是會因?yàn)g覽器而異。

擴(kuò)展閱讀「Standard ECMA-262 5.1 Edition 」
http://www.ecma-international.org/ecma-262/5.1/

擴(kuò)展閱讀「ECMAScript 5 瀏覽器兼容一覽表」
http://caniuse.mojijs.com/Home/Html/item/key/es5/index.html

更多

關(guān)注微信公眾號「劼哥舍」回復(fù)「答案」,獲取關(guān)卡詳解。
關(guān)注 https://github.com/stone0090/javascript-lessons,獲取最新動態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內(nèi)容