1. 程式人生 > >ES6常用新特性總結

ES6常用新特性總結

1.let && const

let命令也用於宣告物件,但是作用域為區域性。

{
    let a = 10;
    var b = 1;
}

在函式外部可以獲取到b,獲取不到a,因此例如for迴圈計數器就適合使用let。

const用於宣告一個常量,設定後值不會再改變。

const PI = 3.1415;
PI // 3.1415
PI = 3;

強行對其進行重新賦值會報錯。

2.iterable型別

為了統一集合型別,ES6標準引入了新的iterable型別,Array、Map和Set都屬於iterable型別,具有iterable型別的集合可以通過新的for … of迴圈來遍歷。

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍歷Array
    alert(x);
}
for (var x of s) { // 遍歷Set
    alert(x);
}
for (var x of m) { // 遍歷Map
    alert(x[0] + '=' + x[1]);
}

Map相關操作方法如下,Set同理:

var m = new Map(); // 空Map
m.set('Adam', 67); // 新增新的key-value m.set('Bob', 59); m.has('Adam'); // 是否存在key 'Adam': true m.get('Adam'); // 67 m.delete('Adam'); // 刪除key 'Adam' m.get('Adam'); // undefined

3.解構賦值

ES6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(Destructuring)。
例如陣列:

let [a, b, c] = [1, 2, 3];
//等同於
let a = 1;
let b = 2;
let c = 3
;

物件的解構賦值:獲取物件的多個屬性並且使用一條語句將它們賦給多個變數。

>var {
  StyleSheet,
  Text,
  View
} = React;

等同於

var StyleSheet = React.StyleSheet
...

4.箭頭函式

ES6中新增箭頭操作符用於簡化函式的寫法,操作符左邊為引數,右邊為具體操作和返回值。

var sum = (num1, num2) => { return num1 + num2; }
//等同於
var sum = function(num1, num2) {
    return num1 + num2;
 };

箭頭函式還修復了this的指向,使其永遠指向詞法作用域:

var obj = {
    birth: 1990,
    getAge: function () {
        var b = this.birth; // 1990
        var fn = () => new Date().getFullYear() - this.birth; // this指向obj物件
        return fn();
    }
};
obj.getAge(); // 25

5.延展操作符

通過它可以將陣列作為引數直接傳入函式:

var people=['Wayou','John','Sherlock'];
function sayHello(people1,people2,people3){
    console.log(`Hello ${people1},${people2},${people3}`);
}
//改寫為
sayHello(...people);//輸出:Hello Wayou,John,Sherlock 

在函式定義時可以通過…rest獲取定義引數外的所有引數:

function foo(a, b, ...rest) {
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}

foo(1, 2, 3, 4, 5);
// 結果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]

6.類

ES6提供了更接近傳統語言的寫法,引入了Class(類)這個概念,作為物件的模板。通過class關鍵字,可以定義類,與多數傳統語言類似。

//定義類
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}