解构赋值

//对象
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// foo = 'aaa'
// bar = 'bbb'
let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'

let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, {  }] } = obj;
// x = 'hello'

//数组
let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3

模板字符串

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."

箭头函数

// 无参
var fn1 = function() {}
var fn1 = () => {}

// 单个参数
var fn2 = function(a) {}
var fn2 = a => {}

// 多个参数
var fn3 = function(a, b) {}
var fn3 = (a, b) => {}

// 可变参数
var fn4 = function(a, b, ...args) {}
var fn4 = (a, b, ...args) => {}

...扩展操作符

let obj1 = {
  book1: '葫芦娃1',
  book2: '葫芦娃2',
  book3: '葫芦娃3'
}
let obj2 = {
  ...obj1,
  book4:'葫芦金刚'
}
console.log(obj2) //{book1: "葫芦娃1", book2: "葫芦娃2", book3: "葫芦娃3", book4: "葫芦金刚"}

//如果后者与前者相同,后者覆盖前者
let obj1 = {
  book1: '葫芦娃1',
  book2: '葫芦娃2',
  book3: '葫芦娃3',
  book4: '葫芦金刚'
}
let obj2 = 
  ...obj1,
  book4: '葫芦金刚XL',
  book5: '蛇精'
}
console.log(obj2) //{book1: "葫芦娃1", book2: "葫芦娃2", book3: "葫芦娃3", book4: "葫芦金刚XL", book5: "蛇精"}

Promise

const promise = new Promise(function(resolve, reject) {
  //some code
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

promise()
.then(function(data){
  console.log('resolved');
  console.log(data);
})
.catch(function(reason){
  console.log('rejected');
  console.log(reason);
});

ES7 awit/async

async function testSync() {
  const response = await new Promise(resolve => {
    setTimeout(() => {
      resolve("async await test...");
    }, 1000);
  });
  console.log(response);
}
testSync();//async await test...

//catch
async function catchErr() {
  try {
    const errRes = await new Promise((resolve, reject) => {
      setTimeout(() => {
        reject("http error...");
      }, 1000);
    );
  } catch(err) {
    console.log(err);
  }
}
catchErr(); //http error...