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.mzph.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对象&…