ES6新增

新增數據作用域

在 ES6 之前,JavaScript只有兩種作用域:全局變量與函數內的局部變量。ES6中新增了塊級作用域,使用letconst關鍵詞定義。

特點

  1. 在同一作用作用域內,變量不能重複定義
  2. 必須先聲明,才能使用(暫時性死區),看如下代碼
let x = 10;
{
    console.log(x);
    let x = 5;
}

以上代碼會Uncaught ReferenceError: Cannot access 'x' before initialization錯誤,因爲console.log(x)執行時會先在當前作用域找x,如果有x,則不會去上級作用域找,但是在console.log(x)語句執行時,x還沒有定義。

  1. 聲名的變量不綁定到window對象上。
  2. 在一對大括號中{},聲名變量時,會產生塊級作用域,變量僅在此塊級作用域中有效。
  3. const定義一個常量,它一旦定義,值就無法改變,所以在定義時必須賦值。

應用

解決閉包問題

for(var i = 0; i < 10; i++) {
    setTimeout(function(){
        console.log(i);
    },1)
}

//以上代碼會輸出10個10

for(let i = 0; i < 10; i++) {
    setTimeout(function(){
        console.log(i);
    },1)
}

//輸出0-9

新增數據類型

在ES6中新增了一下6中數據類型

  • Symbol類型(基本數據類型)
  • Set類型
  • Map類型
  • weakSet類型
  • WeakMap類型
  • TypedArray類型

Symbol()用法

Symbol()類型表示獨一無二的值,最大的用法是用來定義對象的唯一屬性名。Symbol 函數棧不能用 new 命令,因爲 Symbol 是原始數據類型,不是對象。可以接受一個字符串作爲參數,爲新創建的 Symbol 提供描述,用來顯示在控制檯或者作爲字符串的時候使用,便於區分。

let sy = Symbol('abc');
console.log(sy);  //Symbol(abc)
console.log(typeof sy);  //symbol

// 相同參數 Symbol() 返回的值不相等
let sy1 =  Symbol('abc');
console.log(sy == sy1);//false

Set() 用法

Set類型對象允許你存儲任何類型的唯一值,無論是原始值或者是對象引用。它類似於數組,但是他的一大特性就是所有元素都是唯一的,沒有重複。可以利用這一點爲數組去重

let set = new Set([1, 4, 5, 6, 6, 5]);
console.log(set); //Set(4) {1, 4, 5, 6}

//數組轉Set
let arr2 = [12, 3, 43, 2, 3];
let set2 = new Set(arr2);
console.log(set2);  //Set(4) {12, 3, 43, 2}

//使用for...of可以用拉力遍歷Set
for(let i of set) {
    console.log(i);
}
//1 4 5 6

Map() 用法

MapMap對象保存鍵值對,任何值(原始值或對象)都可以作爲一個鍵或一個值。Map是一組鍵值對,有key 也有value。

let map = new Map();
map.set('keystr','mymap');
console.log(map);  //Map(1) {"keystr" => "mymap"}
console.log(map.get('keystr'));  //mymap

//for...of也可以遍歷Map
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章