1. 程式人生 > >關於es6的一些常用關鍵字以及set與陣列的操作

關於es6的一些常用關鍵字以及set與陣列的操作

因為一個數組取差集的需求,搜尋答案中順便學習了下es6的新語法,自己總結了下,感覺很有意義,希望對您有所幫助。

首先介紹下let,與var類似,但用let宣告的變數的作用域只是外層塊,而不是整個外層函式。
以下程式碼中還用到了set(一群值的集合,與陣列類似)。

//let setOfWords1 = new Set([1, 2, 3]);
//let setOfWords2 = new Set([3, 5, 2]); 
var Array1 = [5,6,7,8,18,9,90,81]; 
var Array2 = [10,415,54,87,98,65,81];
let a = new Set(Array1);
let
b = new Set(Array2); // 並集 let unionSet = new Set([...a, ...b]); // set轉化為陣列 let unionSet1 = Array.from(unionSet); console.log(unionSet1); // 交集 let intersectionSet = new Set([...a].filter(x => b.has(x))); // set轉化為陣列 let intersectionSet1 = Array.from(intersectionSet); console.log(intersectionSet1); // 差集
let differenceABSet = new Set([...a].filter(x => !b.has(x))); // set轉化為陣列 let differenceABSet1 = Array.from(differenceABSet); console.log(differenceABSet1);

以下為es6常用關鍵字的簡介總結。

關鍵字let

  • let宣告的變數擁有塊級作用域。也就是說用let宣告的變數的作用域只是外層塊,而不是整個外層函式。

  • let宣告的全域性變數不是全域性物件的屬性。這就意味著,你不可 以通過window.變數名的方式訪問這些變數。它們只存在於一個不可見的塊的作用域中,這個塊理論上是Web頁面中執行的所有JS程式碼的外層塊。

  • 形如for (let x…)的迴圈在每次迭代時都為x建立新的繫結。

  • let宣告的變數直到控制流到達該變數被定義的程式碼行時才會被裝載,所以在到達之前使用該變數會觸發錯誤。

  • 用let重定義變數會丟擲一個語法錯誤(SyntaxError)。

關鍵字const

const宣告的變數與let宣告的變數類似,它們的不同之處在於,const宣告的變數只可以在宣告時賦值,不可隨意修改,否則會導致SyntaxError(語法錯誤)。

關鍵字set

一個Set是一群值的集合。它是可變的,能增刪元素。與陣列區別如下:

  • 一個Set不會包含相同元素,重複加入已有元素不會產生效果。

  • 包含性檢測。

var setOfWords = new Set([1, 2, 3, "zythum"]);
arrayOfWords = [1, 2, 3, "zythum"];
//判斷set集合中是否包含“zythum”
setOfWords.has("zythum")               // 查詢速度快
        true
//判斷陣列中是否包含“zythum”
arrayOfWords.indexOf("zythum") !== -1  // 查詢速度慢
        true
  • 不提供索引

    以下是Set支援的所有操作:

    1. new Set:建立一個新的、空的Set。
    2. new Set(iterable):從任何可遍歷資料中提取元素,構造出一個新的集合。
    3. set.size:獲取集合的大小,即其中元素的個數。
    4. set.has(value):判定集合中是否含有指定元素,返回一個布林值。
    5. set.add(value):新增元素。如果與已有重複,則不產生效果。
    6. set.delete(value):刪除元素。如果並不存在,則不產生效果。.add()和.delete()都會返回集合自身,所以我們可以用鏈式語法。
    7. setSymbol.iterator:返回一個新的遍歷整個集合的迭代器。一般這個方法不會被直接呼叫,因為實際上就是它使集合能夠被遍歷,也就是說,我們可以直接寫for (v of set) {…}等等。
    8. set.forEach(f):直接用程式碼來解釋好了,它就像是for (let value of set) { f(value, value, set); }的簡寫,類似於陣列的.forEach()方法。
    9. set.clear():清空集合。
    10. set.keys()、set.values()和set.entries()返回各種迭代器,它們是為了相容Map而提供的,所以我們待會兒再來看。

關鍵字map

一個Map物件由若干鍵值對組成,是一種更完善的Hash結構實現,類似於物件中的鍵值對應:

var m = new Map();
m.set(o: "content");
var o = {p: "Hello World"};
  1. new Map:返回一個新的、空的Map。
  2. new Map(pairs):根據所含元素形如[key, value]的陣列pairs來建立一個新的Map。這裡提供的pairs可以是一個已有的Map 物件,可以是一個由二元陣列組成的陣列,也可以是逐個生成二元陣列的一個生成器,等等。
  3. map.size:返回Map中專案的個數。
  4. map.has(key):測試一個鍵名是否存在,類似key in obj。
  5. map.get(key):返回一個鍵名對應的值,若鍵名不存在則返回undefined,類似obj[key]。
  6. map.set(key, value):新增一對新的鍵值對,如果鍵名已存在就覆蓋。
  7. map.delete(key):按鍵名刪除一項,類似delete obj[key]。
  8. map.clear():清空Map。
  9. mapSymbol.iterator:返回遍歷所有項的迭代器,每項用一個鍵和值組成的二元陣列表示。
  10. map.forEach(f) 類似for (let [key, value] of map) { f(value, key, map); }。這裡詭異的引數順序,和Set中一樣,是對應著Array.prototype.forEach()。
  11. map.keys():返回遍歷所有鍵的迭代器。
  12. map.values():返回遍歷所有值的迭代器。
  13. map.entries():返回遍歷所有項的迭代器,就像mapSymbol.iterator。實際上,它們就是同一個方法,不同名字。