JavaScript的前生今世,你真的了解嗎

      網友投稿 703 2025-04-08

      1、javaScript的歷史


      1995年,網景公司一位名叫Brendan Eich的工程師,開始為即將發布的NetscapeNavigator 2開發一個叫Mocha(后來改名為LiveScript)的腳本語言。當時的計劃是在客戶端和服務器端都使用它,它在服務器端叫LiveWire。為了趕上發布時間,網景與Sun公司結為開發聯盟,共同完成LiveScript的開發。就在Netscape Navigator 2正式發布前,網景把LiveScript改名為javaScript,以便搭上媒體當時熱烈炒作Java的順風車。

      由于JavaScript 1.0很成功,網景又在Netscape Navigator 3中發布了1.1版本。尚未成熟的Web的受歡迎程度達到了歷史新高,而網景則穩居市場領導者的位置。這時候,微軟決定向IE投入更多資源。就在Netscape Navigator 3發布后不久,微軟發布了IE3,其中包含自己名為JScript(叫這個名字是為了避免與網景發生許可糾紛)的JavaScript實現。1996年8月,微軟重磅進入Web瀏覽器領域,這是網景永遠的痛,但它代表JavaScript作為一門語言向前邁進了一大步。

      微軟的JavaScript實現意味著出現了兩個版本的JavaScript:Netscape Navigator中的JavaScript,以及IE中的JScript。與C語言以及很多其他編程語言不同,JavaScript還沒有規范其語法或特性的標準,兩個版本并存讓這個問題更加突出了。隨著業界擔憂日甚,JavaScript終于踏上了標準化的征程。

      1997年,JavaScript 1.1作為提案被提交給歐洲計算機制造商協會(Ecma)。第39技術委員會(TC39)承擔了“標準化一門通用、跨平臺、廠商中立的腳本語言的語法和語義”的任務(參見TC39-ECMAScript)。TC39委員會由來自網景、Sun、微軟、Borland、Nombas和其他對這門腳本語言有興趣的公司的工程師組成。他們花了數月時間打造出ECMA-262,也就是ECMAScript(發音為“ek-ma-script”)這個新的腳本語言標準。

      JavaScript的前生今世,你真的了解嗎

      1998年,國際標準化組織(ISO)和國際電工委員會(IEC)也將ECMAScript采納為標準(ISO/IEC-16262)。自此以后,各家瀏覽器均以ECMAScript作為自己JavaScript實現的依據。

      2、JavaScript實現

      雖然JavaScript和ECMAScript基本上是同義詞,但JavaScript遠遠不限于ECMA-262所定義的那樣。完整的JavaScript實現包含以下幾個部分:

      ECMAScript - 核心

      DOM - 文檔對象模型

      BOM - 瀏覽器對象模型

      2.1、ECMAScript

      ECMAScript,即ECMA-262定義的語言,并不局限于Web瀏覽器。事實上,這門語言沒有輸入和輸出之類的方法。ECMA-262將這門語言作為一個基準來定義,以便在它之上再構建更穩健的腳本語言。Web瀏覽器只是ECMAScript實現可能存在的一種宿主環境。宿主環境提供ECMAScript的基準實現和與環境自身交互必需的擴展。擴展(比如DOM)使用ECMAScript核心類型和語法,提供特定于環境的額外功能。

      ECMA-262在基本的層面,定義了描述這門語言的如下部分:語法、類型、語句、關鍵字、保留字、操作符、全局對象。ECMAScript只是對實現這個規范描述的所有方面的一門語言的稱呼。JavaScript實現了ECMAScript。

      2.1.1、ECMAScript的版本

      ECMA-262的第1版:本質上跟網景的JavaScript 1.1相同,只不過刪除了所有瀏覽器特定的代碼,外加少量細微的修改。

      ECMA-262的第2版:做了一些編校工作,主要是為了更新之后嚴格符合ISO/IEC-16262的要求,并沒有增減或改變任何特性。

      ECMA-262的第3版:第一次真正對這個標準進行更新,更新了字符串處理、錯誤定義和數值輸出。此外還增加了對正則表達式、新的控制語句、try/catch異常處理的支持,以及為了更好地讓標準國際化所做的少量修改。

      ECMA-262的第4版:對這門語言的一次徹底修訂,包括強類型變量、新語句和數據結構、真正的類和經典的繼承,以及操作數據的新手段。

      ECMA-262的第5版:于2009年12月3日正式發布。第5版致力于厘清第3版存在的歧義,也增加了新功能。新功能包括原生的解析和序列化JSON數據的JSON對象、方便繼承和高級屬性定義的方法,以及新的增強ECMAScript引擎解釋和執行代碼能力的嚴格模式。

      ECMA-262的第6版:俗稱ES6、ES2015或ES Harmony(和諧版),于2015年6月發布。這一版包含了大概這個規范有史以來最重要的一批增強特性。ES6正式支持了類、模塊、迭代器、生成器、箭頭函數、期約、反射、代理和眾多新的數據類型。

      ECMA-262的第7版:也稱為ES7或ES2016,于2016年6月發布。這次修訂只包含少量語法層面的增強,如Array.prototype.includes和指數操作符。

      ECMA-262的第8版:也稱為ES8、ES2017,完成于2017年6月。這一版主要增加了異步函數(async/await)、SharedArrayBuffer及Atomics API,以及Object.values()/Object.entries()/Object. getOwnPropertyDescriptors()和字符串填充方法,另外明確支持對象字面量最后的逗號。

      ECMA-262的第9版:也稱為ES9、ES2018,發布于2018年6月。這次修訂包括異步迭代、剩余和擴展屬性、一組新的正則表達式特性、Promise finally(),以及模板字面量修訂。

      ECMA-262的第10版:也稱為ES10、ES2019,發布于2019年6月。這次修訂增加了Array.prototype. flat()/flatMap()、String.prototype.trimStart()/trimEnd()、Object.fromEntries()方法,以及Symbol.prototype.description屬性,明確定義了Function.prototype.toString()的返回值并固定了Array.prototype.sort()的順序。另外,這次修訂解決了與JSON字符串兼容的問題,并定義了catch子句的可選綁定。

      2.1.2、ECMAScript符合性

      要成為ECMAScript實現,必須滿足下列條件:

      支持ECMA-262中描述的所有“類型、值、對象、屬性、函數,以及程序語法與語義”;

      支持Unicode字符標準。

      此外,符合性實現還可以滿足下列要求:

      增加ECMA-262中未提及的“額外的類型、值、對象、屬性和函數”。ECMA-262所說的這些額外內容主要指規范中未給出的新對象或對象的新屬性。

      支持ECMA-262中沒有定義的“程序和正則表達式語法”(意思是允許修改和擴展內置的正則表達式特性)。

      以上條件為實現開發者基于ECMAScript開發語言提供了極大的權限和靈活度,也是其廣受歡迎的原因之一。

      2.1.3、瀏覽器對ECMAScript的支持

      1、JavaScript1.1與JScript1.0問世

      1996年,NetscapeNavigator3捆綁發布了JavaScript1.1。而相同的JavaScript1.1設計規范隨后作出了對新標準(ECMA-262)的建議被提交給Ecma。伴隨著JavaScript的迅速走紅,Netscape豪情滿懷地著手開發JavaScript1.2。然而,問題時Ecma當時還沒有接受Netscape的建議。

      Netscape Navigator3發布后不久,微軟也推出了Internet Explorer3。微軟在IE的這一版本中捆綁了JScript1.0,很多人都認為JScript1.0與JavaScript1.1應該是一樣的。但是,由于沒有文檔依據,加之不適當的忙方,JScript1.0還是很難與JavaScript1.1相提并論。

      2、JavaScript1.2與JScript3.0對標準的不兼容

      1997年,內置JavaScript1.2的Netscape Navigator4發布,而到這一年年底,ECMA-262第1版也被接受被實現了標準化。結果,雖然ECMAScript被認為是基于JavaScript1.1制定的,但JavaScript1.2與ECMAScript的第1版本并不兼容。

      JScript的升級版是Internet Explorer4中內置的JScript3.0(隨同微軟IIS3.0發布的JScript2.0從來也沒有移植到瀏覽器中)。微軟通過媒體大肆宣傳JScript3.0是世界上第一個ECMA兼容的腳本語言,但當時的ECMA-262尚未定稿。于是JScript3.0與JavaScript1.2都遭遇了相同的尷尬局面——誰都沒有按照最終的ECMAScript標準來實現。

      3、第一個對ECMA-262完全兼容的版本-JavaScript1.3

      Netscape決定更新其JavaScript實現,即在Netscape Navigator4.06中發布JavaScript1.3,從而做到了與ECMA-262的第一個版本完全兼容。在JavaScript1.3中,Netscape增加了對Unicode標準的支持,并在保留JavaScript1.2新增特性的同時實現了所有對象的平臺中立化。

      在Netscape以Mozilla項目的名義開放其源代碼時,預期JavaScript1.4將隨同Netscape Navigator5一道發布。然而,一個激進的決定,徹底重新設計了Netscape代碼,打亂了原有計劃。后來JavaScript1.4只發布了針對Netscape Enterprise Server的服務器版,而沒有內置于Web瀏覽器中。

      4、五大主流Web瀏覽器實現了與ECMA-262兼容

      到了2008年,五大主流Web瀏覽器(IE、Firefox、Safari、Chrome和Opera)全都做到了與ECMA-262兼容。IE8是第一個著手實現ECMA-262第5版的瀏覽器,并在IE9中提供了完整的支持。Firefox4也緊隨其后做到兼容。

      2.2、DOM

      2.2.1、DOM簡介

      文檔對象模型(DOM, Document Object Model)是一個應用編程接口(API),用于在HTML中使用擴展的XML。在DOM中,HTML文檔的層次結構被表示為一個樹形結構。并用document對象表示該文檔,樹的每個子節點表示HTML文檔中的不同內容。每個載入瀏覽器的 HTML 文檔都會成為 Document 對象,Document是探索DOM的入口,利用全局變量document可以訪問Document對象。DOM將整個頁面抽象為一組分層節點。HTML或XML頁面的每個組成部分都是一種節點,包含不同的數據。比如下面的HTML頁面:

      Sample Page

      Hello World!!!

      DOM通過創建表示文檔的樹,讓開發者可以隨心所欲地控制網頁的內容和結構。使用DOM API,可以輕松地刪除、添加、替換、修改節點。

      2.2.2、為什么DOM是必需的

      在IE4和Netscape Navigator 4支持不同形式的動態HTML(DHTML)的情況下,開發者首先可以做到不刷新頁面而修改頁面外觀和內容。這代表了Web技術的一個巨大進步,但也暴露了很大的問題。由于網景和微軟采用不同思路開發DHTML,開發者寫一個HTML頁面就可以在任何瀏覽器中運行的好日子就此終結。

      為了保持Web跨平臺的本性,必須要做點什么。人們擔心如果無法控制網景和微軟各行其是,那么Web就會發生分裂,導致人們面向瀏覽器開發網頁。就在這時,萬維網聯盟(W3C, World Wide Web Consortium)開始了制定DOM標準的進程。

      2.2.3、DOM級別

      DOM Level 1: 1998年10月,DOM Level 1成為W3C的推薦標準。這個規范由兩個模塊組成:DOM Core和DOM HTML。前者提供了一種映射XML文檔,從而方便訪問和操作文檔任意部分的方式;后者擴展了前者,并增加了特定于HTML的對象和方法。

      DOM Level 2: DOM Level 1的目標是映射文檔結構,而DOM Level 2的目標則寬泛得多。這個對最初DOM的擴展增加了對(DHTML早就支持的)鼠標和用戶界面事件、范圍、遍歷(迭代DOM節點的方法)的支持,而且通過對象接口支持了層疊樣式表(CSS)。另外,DOM Level 1中的DOM Core也被擴展以包含對XML命名空間的支持。DOM Level 2新增了以下模塊,以支持新的接口:

      DOM視圖:描述追蹤文檔不同視圖(如應用CSS樣式前后的文檔)的接口。 DOM事件:描述事件及事件處理的接口。 DOM樣式:描述處理元素CSS樣式的接口。 DOM遍歷和范圍:描述遍歷和操作DOM樹的接口。

      DOM Level 3: DOM Level 3進一步擴展了DOM,增加了以統一的方式加載和保存文檔的方法(包含在一個叫DOM Load and Save的新模塊中),還有驗證文檔的方法(DOM Validation)。在Level 3中,DOM Core經過擴展支持了所有XML 1.0的特性,包括XML Infoset、XPath和XML Base。

      DOM4: 目前,W3C不再按照Level來維護DOM了,而是作為DOM Living Standard來維護,其快照稱為DOM4。DOM4新增的內容包括替代Mutation Events的Mutation Observers。

      2.2.4、Web瀏覽器對DOM的支持情況

      DOM標準在Web瀏覽器實現它之前就已經作為標準發布了。IE在第5版中嘗試支持DOM,但直到5.5版才開始真正支持,該版本實現了DOM Level 1的大部分。IE在第6版和第7版中都沒有實現新特性,第8版中修復了一些問題。

      網景在Netscape 6(Mozilla 0.6.0)之前都不支持DOM。Netscape 7之后,Mozilla把開發資源轉移到開發Firefox瀏覽器上。Firefox 3+支持全部的Level 1、幾乎全部的Level 2,以及Level 3的某些部分。

      2.3、BOM

      IE3和Netscape Navigator 3提供了瀏覽器對象模型(BOM)API,用于支持訪問和操作瀏覽器的窗口。使用BOM,開發者可以操控瀏覽器顯示頁面之外的部分。而BOM真正獨一無二的地方,當然也是問題最多的地方,就是它是唯一一個沒有相關標準的JavaScript實現。HTML5改變了這個局面,這個版本的HTML以正式規范的形式涵蓋了盡可能多的BOM特性。由于HTML5的出現,之前很多與BOM有關的問題都迎刃而解了。

      總體來說,BOM主要針對瀏覽器窗口和子窗口(frame),不過人們通常會把任何特定于瀏覽器的擴展都歸在BOM的范疇內。比如,下面就是這樣一些擴展:

      彈出新瀏覽器窗口的能力;

      移動、縮放和關閉瀏覽器窗口的能力;

      navigator對象,提供關于瀏覽器的詳盡信息;

      location對象,提供瀏覽器加載頁面的詳盡信息;

      screen對象,提供關于用戶屏幕分辨率的詳盡信息;

      performance對象,提供瀏覽器內存占用、導航行為和時間統計的詳盡信息;

      對cookie的支持;

      其他自定義對象,如XMLHttpRequest和IE的ActiveXObject。

      Java JavaScript

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps office怎么打出分數?
      下一篇:excel2003按顏色排序的方法
      相關文章
      亚洲精品高清久久| 亚洲a一级免费视频| 亚洲精品福利在线观看| 久久国产精品亚洲一区二区| 亚洲精品自在在线观看| 亚洲综合无码精品一区二区三区| 亚洲人AV永久一区二区三区久久| 国产午夜亚洲精品不卡电影| 国产精品无码亚洲精品2021 | 亚洲一区爱区精品无码| 久久国产成人精品国产成人亚洲| 中文字幕亚洲专区| 亚洲伊人久久精品影院| 狠狠色伊人亚洲综合成人| 亚洲精品无码鲁网中文电影| 亚洲国产精品乱码一区二区| 久久亚洲精品成人综合| 亚洲激情视频在线观看| 亚洲成人动漫在线观看| 亚洲欧洲日本在线观看| 亚洲avav天堂av在线网毛片| 国产精品亚洲专区无码不卡| 国产成人精品曰本亚洲79ren| 中文字幕精品亚洲无线码一区| 亚洲综合AV在线在线播放| 亚洲日本va中文字幕久久| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲网址在线观看你懂的| 亚洲欧洲另类春色校园小说| 2019亚洲午夜无码天堂| 亚洲AV男人的天堂在线观看| 亚洲heyzo专区无码综合| 亚洲国产aⅴ综合网| 久久亚洲国产成人精品无码区| 亚洲国产精品无码av| 在线观看亚洲一区二区| 2019亚洲午夜无码天堂| 爱爱帝国亚洲一区二区三区| 国产午夜亚洲精品国产成人小说| 亚洲va久久久噜噜噜久久狠狠| 亚洲色图黄色小说|