test

簡介

ES6(2015),ECMAScript6.0,是JavaScript的 下一個版本標準。JavaScript是ECMAScript的實現,ECMAScript是JavaScript的標準。javascript

let 和 const

  • let聲明的變量只在let命令所在的代碼塊中有效
  • const聲明一個只讀常亮,一旦聲明不能再被更改

let代碼塊中有效,var全局範圍內有效且存在變量提高(即定義在後面的變量,前面能夠訪問到).html

{
    var a = 3;/*全局都共享*/
    let b = 2;/*被限定在代碼塊中*/
}
console.log(a);/*3*/
//console.log(b);/*Uncaught ReferenceError: a is not defined*/

const聲明一個只讀變量,聲明以後不容許修改,必須初始化。java

{
    const PI = 3.14;
    /*編譯器直接報錯*/
    PI = 3.15;/*attempt to assign to const or readonly variable*/
    console.log(PI);
}

注:這裏的常量保證的只是地址不變,若是是基本類型,則保證數據不變;但若是是對象,只是保證對象的引用地址不變,對象裏面的屬性值依然能夠改變數組

{
    const person={
        name:"wade",
        age:20
    }
    person.name="peter";
    console.log(person);/*{name: "peter", age: 20}*/
    console.log(person.name);/*peter*/
}

解構函數

針對數組或者對象進行模式匹配,而後對其中的變量進行賦值。函數

解構的源=解構的目標 ,注意:左右解構要同樣code

數組(Array)

  1. 左右映射,對應orm

    //基本
    {
        let [a, b, c] = [1, 2, 3];
        console.log(a, b, c)//1 2 3
    }
    //嵌套
    {
        let [a, [b, c]] = [3, [5, 7]];
        console.log(a, b, c)//3 5 7
    }
    
    //忽略
    {
        let [a, , b, c,] = [1, 3, 5, 6, 7];
        console.log(a, b, c)//1 5 6
    }
    1. 默認值,沒有對應的能夠給默認值htm

      {
          let [a = 1, b] = [, 10];
          console.log(a,b)//1 10
      }
    2. 剩餘運算符對象

      {
          let [a,...b]=[1,2,3,5]
          console.log(a)//1
          console.log(b)//[2,3,5]
      }

    對象(Object)

    對象解構與數組解構相似,注意{}與[]區別,左右對應便可,能匹配上就是右邊的值,不能匹配上就是undefined。blog

    {
        let {name, age} = {name: 'wade', age: 18};
        console.log(name, age)//wade 18
    }
    
    {
        let {name,...other}={name:'wade',age:12,sex:'male',height:'150'}
        console.log(name)//wade
        console.log(other)//{age: 12, sex: "male", height: "150"}
    }

Symbol

定義一種新的類型,表示獨一無二的值,最大的用法用來定義惟一的屬性名。

ES6 數據類型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,還新增了 Symbol 。

用法

  • Symbol 函數棧不能用 new 命令,由於 Symbol 是原始數據類型,不是對象。能夠接受一個字符串做爲參數,爲新建立的 Symbol 提供描述,用來顯示在控制檯或者做爲字符串的時候使用,便於區分。
{
    let str1 = Symbol("abc");
    console.log(str1)//Symbol(abc)
    console.log(typeof(str1));symbol

    let str2 =Symbol("abc");
    console.log(str1 == str2)//false
}

做爲屬性名,保證屬性不重名

let name = Symbol("name");
let age = Symbol("age");
{
    let obj = {
        [name]: "wade",
        [age]: 18
    }
    console.log(obj[name],obj[age])//wade 18
    console.log(obj.name)//undefined
}

注:只能經過obj[symbolName]去取值,不能經過點。

Map 與 Set

Map

Map 對象保存鍵值對。任何值(對象或者原始值) 均可以做爲一個鍵或一個值。

map.set(key:any,value:any)

Maps 和 Objects 的區別

  • 一個 Object 的鍵只能是字符串或者 Symbols,但一個 Map 的鍵能夠是任意值。
  • Map 中的鍵值是有序的(FIFO 原則),而添加到對象中的鍵則不是。
  • Map 的鍵值對個數能夠從 size 屬性獲取,而 Object 的鍵值對個數只能手動計算。
  • Object 都有本身的原型,原型鏈上的鍵名有可能和你本身在對象上的設置的鍵名產生衝突。

用法:

{
    let map = new Map();
    let str = "key1";
    map.set(str, "123");
    let obj = {};
    map.set(obj, {name: 10});
    let bool = true;
    map.set(bool, 123);
    let boo=true;
    map.set(boo,234);//當map中存在此key時,會將原來的值替換

    console.log(map.get(str))//123
    console.log(map.get(obj))//{name:10}
    console.log(map.get(bool))//234
    console.log(map.get(boo))//234
}

for ... of 遍歷

//for...of
for (let [key, val] of map) {
    console.log(key, val)
}

for (let [key,val] of map.entries()){
    console.log(key,val);
}

for (let key of map.keys()){
    console.log(key)
}

for (let val of map.values()){
    console.log(val)
}

forEach

map.forEach(function (val, key) {
    console.log(val,key)
})

Map <-----> Array

{
    let map=new Map();
    map.set("k1","wade");
    map.set("k2","peter");

    //map to array
    let arr = Array.from(map);
     /*
     (2) [Array(2), Array(2)]
          0: (2) ["k1", "wade"]
          1: (2) ["k2", "peter"]*/
    console.log(arr)
    //array to map
    let mapFormArr = new Map(arr);
    
    /*
    Map(2) {"k1" => "wade", "k2" => "peter"}
        [[Entries]]
        0: {"k1" => "wade"}
        1: {"k2" => "peter"}
    * */
    console.log(mapFormArr)
}

Set

Set 對象容許你存儲任何類型的惟一值,不管是原始值或者是對象引用。

Set 中的特殊值

Set 對象存儲的值老是惟一的,因此須要判斷兩個值是否恆等。有幾個特殊值須要特殊對待:

  • +0 與 -0 在存儲判斷惟一性的時候是恆等的,因此不重複;
  • undefined 與 undefined 是恆等的,因此不重複;
  • NaN 與 NaN 是不恆等的,可是在 Set 中只能存一個,不重複。
{
    let set = new Set();
    set.add(1);
    set.add("a");
    set.add("a");
    set.add({name: "wade"})


    console.log(set)//Set(3) {1, "a", {…}}
}

集合操做詳情

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息