gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
阅读:6499回复:1

ES7 and ES8 特性,ECMAScript 6教程

楼主#
更多 发布于:2020-02-15 23:32


ECMAScript 6



部署进度

Node 是 JavaScript 的服务器运行环境(runtime)。它对 ES6 的支持度更高。除了那些默认打开的功能,还有一些语法功能已经实现了,但是默认没有打开。使用下面的命令,可以查看 Node 已经实现的 ES6 特性。

// Linux & Mac
$ node --v8-options | grep harmony


// Windows
$ node --v8-options | findstr harmony



一个工具 ES-Checker,用来检查各种运行环境对 ES6 的支持情况。访问ruanyf.github.io/es-checker,可以看到您的浏览器支持 ES6 的程度。运行下面的命令,可以查看你正在使用的 Node 环境对 ES6 的支持程度。



$ npm install -g es-checker
$ es-checker

=========================================
Passes 24 feature Detections
Your runtime supports 57% of ECMAScript 6
=========================================


Babel 转码器
Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行。这意味着,你可以用 ES6 的方式编写程序,又不用担心现有环境是否支持。下面是一个例子。

/ 转码前
input.map(item => item + 1);
// 转码后
   input.map(function (item) {
           return item + 1;
   }
);

上面的原始代码用了箭头函数,Babel 将其转为普通函数,就能在不支持箭头函数的 JavaScript 环境执行了。
下面的命令在项目目录中,安装 Babel。

$ npm install --save-dev @babel/core




 具体见:http://es6.ruanyifeng.com/#docs/intro#部署进度
gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
沙发#
发布于:2020-02-15 23:40
let 和 const 命令

let命令,用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

{ let a = 10; var b = 1; }

a // ReferenceError: a is not defined.
b // 1

for循环的计数器,就很合适使用let命令。


for (let i = 0; i < 10; i++) {
     // ...
}
     console.log(i);
// ReferenceError: i is not defined




下面的代码如果使用var,最后输出的是10
var a = [];
for (var i = 0; i < 10; i++) {
  a = function () {
    console.log(i);
  };
}
a[6](); // 10
上面代码中,变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i。也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10。
如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6。

var a = [];
for (let i = 0; i < 10; i++) {
     a = function () {
              console.log(i);
  };
}
a[6](); // 6
游客


返回顶部