ES6 變量的解構賦值


  • 數組的解構賦值     var [a,b,c] = [1,2,3];    左邊是變量,右邊是值,根據數據結構一一對應
  1. 只要等號兩邊的模式相同,左邊的變量就會被賦予右邊對應的值,必須模式相同
  2. 如果等號右邊的不是數組,確切的說不是可遍歷的數組,那么將會報錯
  3. 解構賦值不僅適用於var 命令,也適用於 let / const 命令   
    1. var [a,b,c,...d] = []; let [a,b,c,...d] = []; const [a,b,c,...d] = [];

       

  4. 只要是可遍歷的數據,都可以使用數組的解構賦值:
    1. let [a,b,c] = new set(["1","2","3"]);
  5. 解構賦值同樣允許指定默認值    let [a = "1",b] = [2];    //a=1  b=2  
  6. 默認值可以引用其它變量,但是該變量必須已經聲明
  • 對象的解構賦值       var {a,b} = {a: "1", b:"2"}     左邊是變量名,右邊是給屬性賦值的對象列表,變量名必須與屬性性名一致,才能取到正確的值,與次序完全沒關系。
  1. 對象的解構賦值與數組有一個重要的不同,數組元素在解構賦值時,是按照次序排列賦值的,變量的值由位置決定;而對象沒有次序,變量必須與屬性性同名,才能取到正確的值
  2. 如果變量名與屬性名不一致,必須把不一致的屬性作為屬性值賦值給有值的屬性:
    1. let {a: d} = {a:"1",b:"2"}; d //1

       

  3. 對象的解構賦值的機制是:先找到同名屬性,然后再賦值對應的變量。真正被賦值的是后者,而不是前者。上面的代碼中,真正被賦值的是 d,而不是 a
  4. let 在聲明變量之后,不可以再重復聲明,如果想要重復聲明,必須將再次聲明的變量與賦值語句用圓括號括起來,否則會報錯。使用圓括號的原因是,解析器會將起首的大括號,理解成一個代碼塊,而不是賦值語句
    1. let a; ({a} = {a:"1"});  //OK
       let b: ({c:b} = {c:"2"});     //OK

      let c:
      {c} = {c: 1} //error
      ({c} = {c:1}); //OK


       

  5. 對象的賦值表達式,也主是賦值語句,如果放在圓括號里,在大部分場景下都可以執行,如果不放在圓括號里,嚴格模式下是會報錯的。
  6. 對象的解構賦值同樣也可以指定默認值:  let {a=""3} = {}
  7. 對象的解構賦值,可以很方便的將現有對象的方法,賦值到某個變量
    1. function logo(){...} function setData(){...} function list(){...} 可以很方便的將上面的三個方法,賦值給一個變量: let {logo,setData,list} = Match;

       

  • 字符串的解構賦值  const [h,e,l,l,o] = 'hello'  字符的解構賦值是把字符串轉換成了類似數組的對象,它有length屬性值,只是類數組,數組的方法不可以用在類數組上
  • 數值和布爾值的解構賦值:如果等號右邊的是數值或布爾值,要先轉換為對象再賦值。解構賦值的規則是,只要等號右邊的不是對象,就先將其轉換為對象(undefined與null無法轉為對象,所以無法對它們進行解構賦值)
  • 函數的參數也可以進行解構賦值,函數的參數也可以使用默認值

 

怎么讓解析器判斷,一個語句,到底是模式還是表達式,沒有辦法從一開始就知道,必須解析到等號才能知道。ES6的規則是:只要有可能導致解構歧義,就不要在模式中放置圓括號。建議,只要有可能,就不要在模式中使用圓括號。不能使用圓括號的三種情況:

  1. 變量聲明語句中,不能帶有圓括號,不能給變量添加圓括號
    1. var [(a)] = [1]                //

       

  2. 函數參數中使用解構賦值時,不能給函數參數使用圓括號
    1. function([(a)]){return a}      //

       

  3. 賦值語句中,不能將模式中的一部分或一層,放入圓括號
    1. ({a:"1"}) = {a:"100"}         //
      ({a: "1"} = {a:"100"})        //正確

       

  • 可以使用圓括號的情況:首先是賦值語句
  1. 可以使用賦值語句的情況只有一種:賦值語的非模式部分,可以使用圓括號
    1. [(a)] = [3]; // 正確
      ({ a: (b) } = {}); // 正確
      [(parseInt.prop)] = [3]; // 正確

       

  2. 之所以能使用,是因為它們首先是賦值語句,而不是聲明語句;
  3. 其次,它們的圓括號都不屬於模式的一部分
  • 變量的解構賦值的用途
  1. 交換變量的值
  2. 從函數返回多個值    返回多個數組方法: let [a,b,c] = example();     返回多個對象方法: let {a,b} = example();
  3. 函數參數,可以很方便的將參數與變量名對應起來
  4. 提取JSON數據:   let {id,status,data:number} = jsonData;
  5. 遍歷數組結構,很方便的獲取鍵名或鍵值   for(let [key, value] of map){...}   獲取鍵名: for(let [key] of map){...}     獲取鍵值: for(let [value] of map){...}
  6. 加載模塊指定, import {render} from 'react-dom';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM