一、ES6介绍

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了也叫ECMAScript 2015。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言

二、let 和 const 命令

let
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

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

const 和let不存在变量提升
const
const声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: “foo” is read-only

变量的解构赋值
数组的解构
let a = 1;
let b = 2;
let c = 3;

ES6 允许写成下面这样。
let [a, b, c] = [1, 2, 3];

二、对象的解构赋值

let { foo, bar } = { foo: ‘aaa’, bar: ‘bbb’ };
foo // “aaa”
bar // “bbb”

let { bar, foo } = { foo: ‘aaa’, bar: ‘bbb’ };
foo // “aaa”
bar // “bbb”

let { baz } = { foo: ‘aaa’, bar: ‘bbb’ };
baz // undefined

三、模板字符串

let place = “world”
// 变量place没有声明
let msg = Hello, ${place};
对象的扩展

三、属性的简洁表示法

const foo = ‘bar’;
const baz = {foo};
baz // {foo: “bar”}

// 等同于
const baz = {foo: foo};

function f(x, y) {
return {x, y};
}

// 等同于

function f(x, y) {
return {x: x, y: y};
}

f(1, 2) // Object {x: 1, y: 2}

除了属性简写,方法也可以简写。
const o = {
method() {
return “Hello!”;
}
};
// 等同于
const o = {
method: function() {
return “Hello!”;
}
};

let birth = ‘2000/01/01’;
const Person = {
name: ‘张三’,
//等同于birth: birth
birth,
// 等同于hello: function ()…
hello() { console.log(‘我的名字是’, this.name); }
};

四、函数的扩展

函数的扩展 ES6 允许使用“箭头”(=>)定义函数。
var f = v => v;

// 等同于
var f = function (v) {
return v;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
var sum = (num1, num2) => { return num1 + num2; }

箭头函数有几个使用注意点

函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。

五、Promise

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
基本用法 ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。下面代码创造了一个Promise实例。
const promise = new Promise(function(resolve, reject) {
// … some code

if (/ 异步操作成功 /){
resolve(value);
} else {
reject(error);
}
});
let promise = new Promise(function(resolve, reject) {
console.log(‘Promise’);
resolve();
});

promise.then(function() {
console.log(‘resolved.’);
});

console.log(‘Hi!’);

// Promise
// Hi!
// resolved

错误捕获
// bad
promise
.then(function(data) {
// success
}, function(err) {
// error
});

// good
promise
.then(function(data) { //cb
// success
})
.catch(function(err) {
// error
});

promise.all() promise.race()

六、async/ awite

ES2017 标准引入了 async 函数,使得异步操作变得更加方便。async 函数是什么?一句话,它就是 Generator 函数的语法糖。
基本用法
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
function timeout(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}

async function asyncPrint(value, ms) {
await timeout(ms);
console.log(value);
}

asyncPrint(‘hello world’, 50);
上面代码指定 50 毫秒以后,输出hello world。

返回 Promise 对象
async function f() {
return ‘hello world’;
}

f().then(v => console.log(v))
// “hello world”

链接:https://www.jianshu.com/p/50890eb1177f