1. 程式人生 > >初學ES6知識要點總結

初學ES6知識要點總結

一、ES6的var和let

傳統常用的var宣告的是全域性的變數,可跨域訪問。
而let宣告的變數屬於塊級的,不可跨塊域獲取。

//es5
for (var i = 0; i < 10; i++) {}
console.info(i);

//es6
for (let j = 0; j < 10; j++) {}
console.info(j);

訪問j會丟擲異常:
ReferenceError: j is not defined

二、ES6的解構賦值

解構賦值大大提高了開發效率及程式碼可讀性

let [x, y] = [1, 2];
/* 相當於
* let x = 1
; * let y = 2; */ console.info(x, y); let { bar, foo: a } = { foo: 'foo', bar: 'bar' }; console.info(bar, a);

輸出結果:
1 2
bar foo

三、ES6的箭頭函式

替代匿名函式,並且解決了方法內部this的指向。

let a = {
  fun: function() {
    console.info(this);
  }
};
let objA = {

};
a.fun();

let b = {
  fun: () => {
    console
.info(this); } }; let objB = {}; b.fun();

輸出結果:
{ fun: [Function: fun] }
{}

第一個方法沒有使用箭頭函式,使用的是傳統方法,導致this指向全域性而非內部,因此輸出了{ fun: [Function: fun] }
第二個方法使用了箭頭函式,讓this指向了內部。

四、ES6的async函式

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', 5000);

輸出結果:
hello world
[Finished in 5.3s]

五、ES6的class類

ES6支援使用class關鍵字宣告一個類

class People {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  toString() {
    return `My name is ${this.name}, ${this.age} age!`;
  }
}

let me = new People('張三丰', 26);
console.info(me.toString());

輸出結果:
My name is 張三丰, 26 age!