<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # ES5, ES6, ES2016, ES.Next: JavaScript 的版本是怎么回事? ![](https://box.kancloud.cn/d3d962cedaeeb237599d74607af3dbf6_428x252.png) ## JavaScript 有著很奇怪的命名史。 1995 年,它作為網景瀏覽器(Netscape Navigator)的一部分首次發布,網景給這個新語言命名為 LiveScript。一年后,為了搭上當時媒體熱炒 Java 的順風車,臨時改名為了 JavaScript(*當然,Java 和 JavaScript 的關系,就和雷鋒和雷鋒塔一樣 —— 并沒有什么關系*) ![歪果仁的笑話怎么一點都不好笑](https://box.kancloud.cn/1b38367de09630cf3a45607d48d8ad6b_633x360.png) > 譯者注:[wikipedia 的 JavaScript 詞條](https://en.wikipedia.org/wiki/JavaScript#History)更詳細的敘述了這段歷史 1996 年,網景將 JavaScript 提交給 ECMA International(歐洲計算機制造商協會)](ECMA International(歐洲計算機制造商協會))進行標準化,并最終確定出新的語言標準,它就是 ECMAScript。自此,ECMAScript 成為所有 JavaScript 實現的基礎,不過,由于 JavaScript 名字的歷史原因和市場原因(很顯然 ECMAScript 這個名字并不令人喜歡……),**現實中我們只用 ECMAScript 稱呼標準,平時都還是使用 JavaScript 來稱呼這個語言**。 > 術語(譯者注): > * 標準(Standard): 用于定義與其他事物區別的一套規則 > * 實現(Implementation): 某個標準的具體實施/真實實踐 不過,JavaScript 開發者們并不怎么在乎這些,因為在誕生之后的 15 年里,ECMAScript 并沒有多少變化,而且現實中的很多實現都已經和標準大相徑庭。其實在第一版的 ECMAScript 發布后,很快又跟進發布了兩個版本,但是自從 1999 年 ECMAScript 3 發布后,十年內都沒有任何改動被成功添加到官方規范里。取而代之的,是各大瀏覽器廠商們爭先進行自己的語言拓展,web 開發者們別無選擇只能去嘗試并且支持這些 API。即使是在 2009 年 ECMAScript 5 發布之后,仍然用了數年這些新規范才得到了瀏覽器的廣泛支持,可是大部分開發者還是寫著 ECMAScript 3 風格的代碼,并不覺得有必要去了解這些規范。 > 譯者注:[ECMAScript 第四版草案](https://en.wikipedia.org/wiki/ECMAScript#4th_Edition_.28abandoned.29)由于太過激進而被拋棄,Adobe 的[ActionScript 3.0](https://en.wikipedia.org/wiki/ActionScript)是 ECMAScript edition 4 的唯一實現( Flash 差點就統一 Web 了) 到了 2012 年,事情突然開始有了轉變。大家開始推動停止對舊版本 IE 瀏覽器的支持,用 ECMAScript 5 (ES5) 風格來編寫代碼也變得更加可行。與此同時,一個新的 ECMAScript 規范也開始啟動。**到了這時,大家開始逐漸習慣以對 ECMAScript 規范的版本支持程度來形容各種 JavaScript 實現**。在正式被指名為 ECMAScript 第 6 版 (ES6) 之前,這個新的標準原本被稱為 ES.Harmony(和諧)。2015 年,負責制定 ECMAScript 規范草案的委員會 TC39 決定將定義新標準的制度改為一年一次,這意味著每個新特性一旦被批準就可以添加,而不像以往一樣,規范只有在整個草案完成,所有特性都沒問題后才能被定稿。因此,ECMAScript 第 6 版在六月份公布之前,又被重命名為了 ECMAScript 2015(ES2015) 目前,仍然有很多新的 JavaScript 特性或語法正在提議中,包括[decorators(裝飾者)](https://github.com/wycats/javascript-decorators),[async-await(async-await 異步編程模型)](https://github.com/lukehoban/ecmascript-asyncawait)和[static class properties(靜態類屬性)](https://github.com/jeffmo/es-class-properties)。它們通常被稱為 ES7,ES2016 或者 ES.Next 的特性,不過實際上它們只能被稱作提案或者說可能性,畢竟 ES2016 的規范還沒有完成,有可能全部都會引入,也有可能一個都沒有。TC39 把一個提案分為 4 個階段,你可以在[Babel 的官網](https://babeljs.io/docs/usage/experimental/)上查看各個提案目前都在哪個階段了。 ## 如何使用這一大堆術語 所以,我們該如何使用這一大堆術語呢?下面的列表或許能幫助到你: ECMAScript:一個由 ECMA International 進行標準化,TC39 委員會進行監督的語言。通常用于指代標準本身。 JavaScript:ECMAScript 標準的各種實現的最常用稱呼。這個術語并不局限于某個特定版本的 ECMAScript 規范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的實現。 * ECMAScript 5 (ES5):ECMAScript 的第五版修訂,于 2009 年完成標準化。這個規范在所有現代瀏覽器中都相當完全的實現了。 * ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015):ECMAScript 的第六版修訂,于 2015 年完成標準化。這個標準被部分實現于大部分現代瀏覽器。可以查閱[這張兼容性表](http://kangax.github.io/compat-table/es6/)來查看不同瀏覽器和工具的實現情況。 * ECMAScript 2016:預計的第七版 ECMAScript 修訂,計劃于明年夏季發布。這份規范具體將包含哪些特性還沒有最終確定 * ECMAScript Proposals:被考慮加入未來版本 ECMAScript 標準的特性與語法提案,他們需要經歷五個階段:Strawman(稻草人),Proposal(提議),Draft(草案),Candidate(候選)以及 Finished (完成)。 在這整個 Blog 中,我將把目前的 ECMAScript 版本稱作 ES6(因為這是大部分開發者最習以為常的),把明年的規范稱作 ES2016(因為,與 ES6/ES2015 不同,這個名字將在整個標準化過程中沿用)并且將那些還沒有成為 ECMAScript 定稿或草案的未來語言概念稱為 ECMAScript 提案或者 JavaScript 提案。我將盡我所能在任何可能引起困惑的場合沿用這篇文章。 ## 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委員會計劃,以后每年發布一個ECMAScirpt的版本,下一個版本在2016年發布,稱為“ECMAScript 2016”。 > 除了ECMAScript的版本,很長一段時間中,Netscape公司(以及繼承它的Mozilla基金會)在內部依然使用自己的版本號。 這導致了 JavaScript 有自己不同于 ECMAScript 的版本號。 1996年3月,Navigator 2.0 內置了 JavaScript 1.0。 JavaScript 1.1 版對應 ECMAScript 1.0,但是直到 JavaScript 1.4 版才完全兼容 ECMAScript 1.0。 JavaScript 1.5 版完全兼容 ECMAScript 3.0。 **目前的 JavaScript 1.8 版完全兼容 ECMAScript 5 。** ## ECMAScript發生了什么變化? 編程語言 JavaScript 是 ECMAScript 的實現和擴展,由 ECMA(一個類似W3C的標準組織)參與進行標準化。ECMAScript定義了: [語言語法](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar) – 語法解析規則、關鍵字、語句、聲明、運算符等。 類型 – 布爾型、數字、字符串、對象等。 原型和繼承 內建對象和函數的[標準庫](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) – JSON、Math、數組方法、對象自省方法等。 ECMAScript 標準不定義 HTML 或 CSS 的相關功能,也不定義類似 DOM(文檔對象模型)的 [Web API](https://developer.mozilla.org/en-US/docs/Web/API) ,這些都在獨立的標準中進行定義。 ECMAScript 涵蓋了各種環境中 JS 的使用場景,無論是瀏覽器環境還是類似 [node.js](http://nodejs.org/) 的非瀏覽器環境。 ## 新標準 上周,ECMAScript 語言規范第6版最終草案提請 Ecma 大會審查,這意味著什么呢? 這意味著在今年夏天,我們將迎來最新的 JavaScript 核心語言標準。 這無疑是一則重磅新聞。早在 2009 年,上一版 ES5 剛剛發布,自那時起,ES 標準委員會一直在緊鑼密鼓地籌備新的JS語言標準—— ES6。 ES6 是一次重大的版本升級,與此同時,由于 ES6 秉承著最大化兼容已有代碼的設計理念,你過去編寫的JS代碼將繼續正常運行。事實上,許多瀏覽器已經支持部分 ES6 特性,并將繼續努力實現其余特性。這意味著,在一些已經實現部分特性的瀏覽器中,你的 JS 代碼已經可以正常運行。如果到目前為止你尚未遇到任何兼容性問題,那么你很有可能將不會遇到這些問題,瀏覽器正飛速實現各種新特性。 ## 版本號6 **ECMAScript標準的歷史版本分別是1、2、3、5。** 那么為什么沒有第4版?其實,在過去確實曾計劃發布提出巨量新特性的第4版,但最終卻因想法太過激進而慘遭廢除(這一版標準中曾經有一個極其復雜的支持泛型和類型推斷的內建靜態類型系統)。 ES4 飽受爭議,當標準委員會最終停止開發 ES4 時,其成員同意發布一個相對謙和的 ES5 版本,隨后繼續制定一些更具實質性的新特性。這一明確的協商協議最終命名為“Harmony”,因此,ES5 規范中包含這樣兩句話: >ECMAScript 是一門充滿活力的語言,并在不斷進化中。 未來版本的規范中將持續進行重要的技術改進。 這一聲明許下了一個未來的承諾。 ## 兌現承諾 **2009年發布的改進版本ES5,引入了Object.create()、Object.defineProperty()、getters和setters、嚴格模式以及JSON對象。**我已經使用過所有這些新特性,并且我非常喜歡ES5做出的改進。但事實上,這些改進并沒有深入影響我編寫JS代碼的方式,對我來說最大的革新大概就是新的[數組](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)方法:[.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)、[. filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)這些。 但是,ES6并非如此!經過持續幾年的磨礪,它已成為JS有史以來最實質的升級,新的語言和庫特性就像無主之寶,等待有識之士的發掘。新的語言特性涵蓋范圍甚廣,小到受歡迎的語法糖,例如箭頭函數(arrow functions)和簡單的字符串插值(string interpolation),大到燒腦的新概念,例如代理(proxies)和生成器(generators)。 ES6將徹底改變你編寫JS代碼的方式! # 附錄: 1. ECMAScript:一個由 ECMA International 進行標準化,TC39 委員會進行監督的語言。通常用于指代標準本身。 2. JavaScript:ECMAScript 標準的各種實現的最常用稱呼。這個術語并不局限于某個特定版本的 ECMAScript 規范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的實現。 3. ECMAScript 5 (ES5):ECMAScript 的第五版修訂,于 2009 年完成標準化。這個規范在所有現代瀏覽器中都相當完全的實現了。 4. [ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015)](http://www.ecma-international.org/ecma-262/6.0/index.html):ECMAScript 的第六版修訂,于 2015 年完成標準化。這個標準被部分實現于大部分現代瀏覽器。可以查閱這張[兼容性表](https://kangax.github.io/compat-table/es6/)來查看不同瀏覽器和工具的實現情況。 5. ECMAScript 2016:預計的第七版 ECMAScript 修訂,計劃于明年夏季發布。這份規范具體將包含哪些特性還沒有最終確定 6. ECMAScript Proposals:被考慮加入未來版本 ECMAScript 標準的特性與語法提案,他們需要經歷五個階段:Strawman(稻草人),Proposal(提議),Draft(草案),Candidate(候選)以及 Finished (完成)。 ## 一些資源 * [TC39 的Github 倉庫](https://github.com/tc39/ecma262)上可以看到所有目前公開的提案 * 如果你還不熟悉 ES6,Babel 有一個很不錯的[特性概覽](https://babeljs.io/docs/learn-es2015/) * 如果你希望深入 ES6,這里有兩本很不錯的書: Axel Rauschmayer 的[Exploring ES6](http://exploringjs.com/)和 Nicholas Zakas 的[Understanding ECMAScript 6](https://leanpub.com/understandinges6)。 * [Axel 的博客2ality](http://www.2ality.com/)也是很不錯的 ES6 資源
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看