ES6-1 ES6版本过渡历史

本文介绍了ES6的历史,包括JavaScript的发展和ES5、ES6的发布时间。接着详细讨论了Babel编译器的使用,包括基本用法、不转译的API以及其在处理新提案和平台兼容性中的角色。此外,还提到了在线编译工具和Node.js对ES6的支持情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 历史

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的支持

浏览器版本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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值