ES6、ES7、ES8特性-学习提炼总结(一)

ES6

ECMAScript 6.0,简称ES6是JavaScript语言的下一代标准,在2015年6月发布。目的是让JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

Babel转码器

Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。

Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。

Babel提供babel-cli工具,用于命令行转码。

babel-cli工具自带一个babel-node命令,提供一个支持ES6的REPL环境。它支持Node的REPL环境的所有功能,而且可以直接运行ES6代码。它不用单独安装,而是随babel-cli一起安装。

$ npm install --save-dev babel-cli

babel-register模块改写require命令,为它加上一个钩子。此后,每当使用require加载.js、.jsx、.es和.es6后缀名的文件,就会先用Babel进行转码。

$ npm install --save-dev babel-register

如果某些代码需要调用Babel的API进行转码,就要使用babel-core模块。

$ npm install babel-core --save

Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

$ npm install --save babel-polyfill

let和const命令

let和const只在当前块级作用域下声明才有效。

{
    let a = 10;
    var b = 1;
}
a // ReferenceError: a is not define.
b // 1
复制代码

不存在变量提升

// var 情况
console.log(foo); // undefined
var foo = 2;
// let 情况
console.log(bar); // 报错ReferenceError
let bar = 2;
复制代码

暂时性死区

console.log(bar); // 报错ReferenceError
let bar = 2;
复制代码

不允许重复声明

let a; 
let a; 
console.log(a); // 报错
复制代码

const 声明一个只读的常量。一旦声明,常量的值就不能改变。

ES6声明变量的六种方法:

var、function、let、const、import、class

变量的解构赋值

数组的解构赋值

let [a, b, c] = [1, 2, 3]; // a = 1; b = 2; c = 3;
let [a, b, c = 3] = [1,2]; // a = 1; b = 2; c = 3;
复制代码

对象的解构赋值

let { foo, bar } = { foo: "aaa", bar: "bbb" }; 
复制代码

字符串的解构赋值

const [a,b,c,d,e] = 'hello';
复制代码

函数参数的解构赋值

funtion add([x, y]) {
    return x + y;
}
add([1,2]);  // 3
复制代码

用途

  • 交换变量的值
let x = 1; 
let y = 2;
[x, y] = [y, x];
复制代码
  • 从函数返回多个值
// 返回一个数组
function example() {
    return [1, 2, 3];
}
let [a, b, c] = example();

// 返回一个对象
function example() {
    return {
        foo: 1,
        bar: 2
    };
}
let { foo, bar } = example();
复制代码
  • 函数参数的定义
// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);

// 参数是一组无次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});
复制代码
  • 提取JSON数据
let jsonData = {
    id: 42,
    status: "OK",
    data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
复制代码
  • 函数参数的默认值
JQuery.ajax = function (url, {
   async = true,
   beforeSend = function () {},
   cache = true,
   complete = function () {},
   crossDomain = false,
   global = true
} = {}) {
    // do stuff 
};
复制代码
  • 遍历Map结构
const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');

for (let [key, value] of map) {
  console.log(key + " is " + value);
}
// first is hello
// second is world

// 获取键名
for (let [key] of map) {
  // ...
}

// 获取键值
for (let [,value] of map) {
  // ...
}
复制代码

参考资料:

caibaojian.com/es6/

阮一峰ECMAScript 6入门

猜你喜欢

转载自juejin.im/post/5bf61d995188250808257441