初學ES6知識要點總結
阿新 • • 發佈:2019-01-23
一、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!