ES6-1 ES6版本過渡歷史

一 歷史

HTML

  • HTML 1, HTML 2, HTML 3 1991-1997 IETF(the Internet Engineering Task Force) 國際互聯網工程任務組
  • 1997.1 HTML3.2 W3C

JavaScript

  • 1995 liveScript(后改名為JavaScript1996年改名)
  • 1996 javascript 1.0 1.1;
  • 1997 Jscript
  • 1997.6 ECMAScript 1.0
  • 1998.6 ECMAScript 2.0
  • 1999.12 ECMAScript 3.0
  • 2000 ECMAScript 4.0 草案沒有通過 TC39
  • 2007 ECMAScript 4.0 準備發布,不發布
  • 2008.7 ECMAScript 3.1(改名為ECMA5) 大會項目代號(harmony)
  • 2009.12
  • ECMAScript5 正式發布
  • javaScript.next(放入草案)
  • javaScript.next.next(放入草案)
  • 2011.6 ECMAScript5.1
  • 2013.3 javaScript.next 草案凍結 ES6
  • 2013.6 javaScript.next 草案發布 ES7
  • 2015.6 ECMAScript6正式發布
  • 從這開始,每年6月出ES6的新版本:ECMAScript2016 ECMAScript2017 ECMAScript2018都是ES6的幾次版本更迭
    ES6 代表的是一個大版本并不是第幾年

總結概括 :ES6 既是一個歷史名詞,也是一個泛指,含義是 5.1 版以后的 JavaScript 的下一代標準,涵蓋了 ES2015、ES2016、ES2017 等等,而 ES2015 則是正式名稱,特指該年發布的正式版本的語言標準。本書中提到 ES6 的地方,一般是指 ES2015 標準,但有時也是泛指“下一代 JavaScript 語言”。

對ES5的支持

  • 現代瀏覽器都支持ES5
    can i use ES5?
瀏覽器版本release時間
IE102012.09.04
Edge122015.07.09
Firefox212013.04.02
Chrome232012.09.25
Safari62012.07.25
Opera152013.06.15

在這里插入圖片描述

對ES6的支持

瀏覽器版本release時間
IE部分支持
Edge152017.04.11
Firefox542017.06.13
Chrome512016.05.26
Safari102016.09.20
Opera382016.06.08

在這里插入圖片描述

二 編譯 - babel

什么是babel
實用參考
ES6 轉 ES5(如果用戶使用的是IE,不轉譯的情況,一些語法是不支持的)

我們使用 @babel/cli 從終端運行 Babel,利用 @babel/polyfill 來模擬所有新的 JavaScript 功能,而 env preset 只對我們所使用的并且目標瀏覽器中缺失的功能進行代碼轉換和加載 polyfill。

1. 基本使用

注意版本,版本不同會導致編譯報錯

  • npm只能在node環境中實現,所以裝node時自動安裝了npm
  • npm是包管理工具
  • 安裝node 配置系統環境變量
  • n npm的版本管理工具
1. 初始化項目 用init不要用i
npm init 
2. 安裝核心庫、命令行工具
npm install --save-dev @babel/core @babel/cli
3. 預設:如果不進行任何配置,preset 所包含的插件將支持所有最新的 JavaScript (ES2015、ES2016 等)特性
npm install @babel/preset-env --save-dev
4.
配置script 
babel后是要編譯的文件 也可以是文件路徑 
lib是編譯文件輸出的路徑 
"build": "babel app.js -d lib"
5. 配置babelrc
{"presets": ["@babel/preset-env"]
}
6. 編譯
npm run build
7. 運行node1方式
node lib/app.js
8. 運行babel-node方式
要先安裝babel-node
yarn add @babel/node -D
8.1)配置script
"myscript": "babel-node app.js"
8.2)執行 
npm run myscript

在這里插入圖片描述

不同配置指令 -o 指定文件編譯為指定文件
babel app.js -o bundle.js
-d 路徑 → 路徑  文件 → 路徑 編譯后文件和原文件同名
babel app.js -d bundle

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2. 不轉碼ECMAScript2015新api

Babel 默認只轉換新的 JavaScript 句法(syntax),而不轉換新的
API,比如Iterator、Generator、Set、Map、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assignArray.from等)都不會轉碼。
不轉譯內容

var newM = new Map();

可以通過babel-polyfill轉譯

npm install babel-polyfill -S

3. 作用

作者:尤雨溪
鏈接:https://www.zhihu.com/question/61124018/answer/184718397
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
babel 的存在不只是為了『使用 es 的所有新特性』。它需要考慮如下問題:如何處理尚未成為標準的提案?
建議你先了解一下 ECMAScript 的制定流程 (參考: http://wwsun.github.io/posts/new-in-es2016.html),除了已經正式納入規范 (ES2015/6/7) 的特性,還有許多處于不同討論階段的特性提案 (stage 1/2/3/4)。這些討論中的特性嚴格來說還不算是標準,尤其是 stage 1/2 的特性,完全有可能被改動甚至是撤銷提案。因此從 babel 的角度來說,顯然不能夠默認啟用這些特性,而需要有可配置的選項讓用戶自行衡量風險,決定是否使用。
如何針對不同平臺的支持情況,減少無用特性的編譯。
默認目標通常是 ES5,但其實每個特性都有對應的性能開銷,babel 本來速度就不是很快,如果能針對目標平臺減少需要處理的特性,可以提高編譯效率,也可以盡量使用平臺原生的 ES 特性。比如如果只針對最新的 Chrome,大部分插件都是不需要的。有時候你可能只需要一兩個特定的插件,比如 syntax-dynamic-import。有時候你可能需要保留一些 ES 特性不編譯,比如使用 webpack 2 的時候保留 ES modules 語法不編譯為 CommonJS。這些都決定了可配置性是必需的。當然手動配置肯定很麻煩,這也是為什么現在有了 babel-preset-env,可以自動根據目標平臺分析需要用哪些插件。
作為一個編譯工具鏈,給予用戶實驗、甚至是實現非標準的語言擴展的能力。
Babel 的一個重要意義就在于能夠讓用戶提前使用尚未成為標準的語言特性,從而為標準本身的制定提供實踐中才能獲得的反饋。一個提案靠不靠譜,該不該成為標準?先做個插件出來用到項目里感受一下,比空口討論靠譜得多。
至于非標準擴展,比如 JSX 并非 ES 標準,但其編譯就是完全依賴 Babel 的可配置的插件能力才得以實現的。
另外,babel 作為一個工具鏈還可以有很多其他用途,比如用來進行編譯時的性能優化、測試覆蓋率的 instrumentation 等等。綜上,插件化是 babel 存在的核心價值,對于配置的問題,它的答案是 preset;對于題主的需求,用 babel-preset-env 的默認配置即可。另外如果沒有以上這些可配置性方面的需求,Buble (https://buble.surge.sh) 也是一個可以考慮的選擇,但 Buble 并不追求與規范 100% 的一致性,是否適合你,需要你自行判斷。

三 在線編譯

babel官網在線編譯

四 node對es6版本支持情況

node.green

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251045.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251045.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle 數據庫查詢 COALESCE字符函數

功能:返回其參數中的第一個非空表達式,當你要在n個字段中選取某一個非空值 coalesce函數返回參數(列名)中第一個非NULL的字段值,注意不是為空 select COALESCE(t1.a ,t2.a) as a from table_a t1left join table_b t2…

Django-model進階

知識預覽 QuerySet中介模型查詢優化extra整體插入回到頂部QuerySet 可切片 使用Python 的切片語法來限制查詢集記錄的數目 。它等同于SQL 的LIMIT 和OFFSET 子句。 1>>> Entry.objects.all()[:5] # (LIMIT 5)>>> Entry.objects.all()[5:10] # (OFFSE…

vue --- 修飾符.lazy、.number、.trim

.lazy: 會在轉變為change事件中同步 <div id"app"><input type"text" v-model.lazy"message"><p>{{ message }}</p> </div> <script>const app new Vue({el:#app,data: {message: }}) </script> //…

ES6-2 塊級作用域與嵌套、let、暫行性死區

注意&#xff0c;寫在開頭 function test(x 1) {var x // 不報錯console.log(x) } function test1(x 1) {let x 10 // 報錯console.log(x) }let的變量名不可以和參數中的名稱相同。而var并不限制&#xff0c;說白了就是希望你規范使用變量名。 形參原則上數組函數內部的臨…

常用的操作系統知識

為什么要有操作系統 現代計算機系統是由一個或者多個處理器&#xff0c;主存&#xff0c;磁盤&#xff0c;打印機&#xff0c;鍵盤&#xff0c;鼠標顯示器&#xff0c;網絡接口以及各種其他輸入&#xff0c;輸出設備組成的復雜系統&#xff0c;每位程序員不可能掌握所有系統實現…

vue --- 使用中央事件總線(bus)實現跨組件通信

使用Bus實現跨組件傳輸須注意以下3點: 1.需要創建一個空的Vue實例(bus),來作為中間站 2.使用bus.emit來發送事件3.使用bus.emit來發送事件 3.使用bus.emit來發送事件3.使用bus.on來監聽事件(在鉤子created中監聽) 代碼如下: <!DOCTYPE html> <html> <head>…

Execution Order of Event Functions, unity 3d 事件函數的執行順序

vs_Community.exe --layout "F:\linson\vs2017 comm\offline" --lang zh-CN 學習unity3d&#xff0c;感覺事件順序很重要。就翻譯一下官方文檔吧。 Execution Order of Event Functions 事件函數的執行順序 In Unity scripting, there are a number of event functio…

ES6-3 let進階、const、全部變量與頂層對象

一 const 1. 定義常量 1.1 引入模塊時 const test require(http)1.2 定義時必須賦值(初始化)且不可修改 const a; // Uncaught SyntaxError: Missing initializer in const declaration若賦值為原始值&#xff0c;不可修改若賦值為引用值&#xff0c;對于的地址不可修改&a…

前后端如何通信

目錄 前后端如何通信URL . URI . URN第一部分&#xff1a;傳輸協議第二部分&#xff1a;域名第三部分&#xff1a;端口號第四部分&#xff1a;請求資源文件的路徑名稱第五部分&#xff1a;問號傳參第六部分&#xff1a;HASH值前后端如何通信 前段&#xff1a;客戶端 后端&#…

vue --- 獲取子組件數據的一個應急方案$refs

使用$refs需要注意以下2點: 1.html方法使用子組件時,需使用ref “xxx” 聲明. 2.在父組件中使用,this.refs.xxx.msg 獲取數據 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> </head> <body><div id"app"…

Mysql 根據出生日期計算年齡

最近因為業務要求需要根據出生日期計算年齡&#xff0c;在網上查了好多的方法&#xff0c;在這里總結一下。 網上的計算方法好多都提到了格里高利歷法&#xff0c;特意去查了下資料&#xff0c;普及點知識。 格里高利歷是公歷的標準名稱&#xff0c;是一種源自于西方社會的歷法…

ES6-4/5 解構賦值、函數默認值、數組解構、對象解構

ES-4 解構賦值、函數默認值、數組解構、對象解構 ES-5 隱式轉換、函數參數解構、解構本質、()用法 一 解構賦值 1 虛值 含義&#xff1a;在Boolean轉換結果為假的值falsy 2 函數默認值 ES6 內部使用嚴格相等運算符&#xff08;&#xff09;&#xff0c;判斷一個位置是否有值…

springboot之session、cookie

1- 獲取session的方案 session: https://blog.csdn.net/yiifaa/article/details/77542208 2- session什么時候創建&#xff1f; 一個常見的誤解是以為session在有客戶端訪問時就被創建&#xff0c;然而事實是直到某server端程序調用HttpServletRequest.getSession(true)這樣…

echarts --- 多折線圖按段顯示顏色規則訂制

描述: 圖中有4個序列,序列1和序列2在同一個x軸下,顯示不同的顏色.(如,在-40到-30,序列一是紅色,而序列2是黑色) 關鍵: VisualMap中的seriesIndex屬性(根據不同的系列,制定不同的顏色規則). 下面是代碼,可以直接復制到 echart實例 中進行調試 var symbolSize 20; var data [[…

Git-分布式版本控制系統

一、版本控制 版本控制系統是記錄若干文件內容變化&#xff0c;以便將來查閱修訂特定版本或還原部分文件的系統 分為&#xff1a;集中式版本控制系統&#xff08;svn&#xff09;簡稱cvcs 都有一個單一集中管理服務器&#xff0c;保存所有文件修訂版本&#xff0c;開發人員通…

ES6-6 - this指向、箭頭函數基本形式、rest運算符

一 chrome斷點調試 觀察函數調用棧 // 25min var x 1; function foo(x, y function () { x 2; console.log(2) }) {var x 3;y();console.log(x) } foo() console.log(x) // 2 3 1var x 1; function foo(x, y function () { x 2; console.log(x) }) {x 3;y();console.…

【二分答案】Problem C:木材加工

Problem C:木材加工 Time Limit:1000MS Memory Limit:65536K Total Submit:48 Accepted:20 Description 【問題描述】 木材廠有一些原木&#xff0c;現在想把這些木頭切割成一些長度相同的小段木頭&#xff08;木頭有可能有剩余&#xff09;&#xff0c;需要得到的小段的數目是…

vue --- vue.js實戰基礎篇課后練習

練習1:在輸入框聚焦時,增加對鍵盤上下鍵按鍵的支持,相當于加1和減1 練習2:增加一個控制步伐的prop-step,比如設置為10,點擊加號按鈕,一次增加10 思路: // 考慮到子模板的復用性,即在父模板中復用如下: <input-number v-model"value" :max"10" :min&qu…

js打字效果

//文字依次出來效果 $.fn.autotype function() {var $text $(this);// console.log(this, this);var str $text.html(); //返回被選 元素的內容var index 0;var x $text.html();//$text.html()和$(this).html()有區別var timer setInterval(function() {//substr(index, …

ES6-7 - 箭頭函數的實質、箭頭函數的使用場景

箭頭函數返回對象 // 這種情況要要用(),否則會將對象的{}解釋為塊 const fn (a, b) > ({a:1, b:2})箭頭函數的特點 this指向由外層函數的作用域來決定&#xff0c;它本身沒有this&#xff0c;不能通過call、apply、bind改變不能作為構造函數使用不可以使用arguments對象&…