ES6--解構賦值


解構賦值,即對某種結構進行解析,然后將解析出來的值賦值給相關的變量,常見的有數組、對象、字符串的解構賦值等;

今天是要說的是數組、對象和函數參數的解構賦值:

一、 數組的解構賦值

1.前后模式必須匹配,如果前面的聲明的是二維數組后面的數據也是二維數組

 //數組的解構賦值
    let [a,b,c]=[12,23,34]
    console.log(a,b,c) //12,23,34

    let [d,[e,f],g]=[1,[2,3],4]
    console.log(d,e,f,g) //1,2,3,4

2.前多后少,即前面聲明的變量多,后面賦值少

所以某些變量會解構不成功,這種情況就相當於只聲明了變量未定義值,所以為undefined

let [a,b,c]=[1,2]
console.log(a,b,c) //1,2,undefined

3.前少后多,即前面的變量少,后面的值多;這種情況分為兩種:

(1)省略賦值

(2)不定參數解構賦值

         ...是拓展運算符

   //省略賦值
    let [,,a]=[1,2,3];
    console.log(a) // 3

    //...不定參數解構賦值
    let [c,...s]=[1,2,3,4];
    console.log(c,s)  // 1  [2, 3, 4]

4.數組解構賦值的默認值

Q1:先賦值默認值再解構賦值還是直接解構賦值不考慮默認值?

A:直接解構賦值不考慮默認值

//先賦值默認值再解構賦值還是直接解構賦值不考慮默認值?
    let [x, y = (function () {
        console.log("1111");
        return 10;
    })()] = [45, 32]

    console.log(y) 

Q2:什么時候會賦值為默認值?

A:當解構不成功,則前有變量,后未定義時,此時此變量的值為undefined就會走默認值;其他的情況都不是未定義

var a= null var a= [ ] 這些情況都是定義了

二、對象的解構賦值

1.變量和屬性名必須同名,才可以解構賦值、

   //變量和屬性必須同名 才可以解構賦值
    let {a,b}={a:"張三",b:"李四"}
    console.log(a,b) //張三 李四

2.解構不成功,值為undefined

    let {a,b}={a:"張三"}
    console.log(a,b) //張三 undefined

3.如果需要變量名和屬性名不一致時

    //變量名和屬性名不一致時
    let {aa:A,bb:B}={aa:"張三",bb:"李四"}
    console.log(A,B) //張三 李四

4.對象解構賦值的默認問題  

與數組解構相同,解構成功時直接賦值,不考慮默認值,解構不成功沒有值或undefined就會賦值默認值

5.對象解構賦值時需要注意

{}前必須加 let

{a}={a:"zhangsan"}   ✖

let   {a}={a:"zhangsan"}   ✔

6.當聲明一些方法等於它的類時,就可以直接使用這個方法

    let {ceil}=Math;
    let a=ceil(2.3);
    console.log(a)  //3

    let {log}=console;
    log("aaa") //aaa

三、函數參數的解構賦值

1.函數參數的默認值

function f(a=5){  //等號左邊是形參,右邊是默認值
   console.log(a)
 }
 f(3)
 //  a是形參 5是默認值  3是實參  

 當函數的參數解構賦值的時候要理清函數的默認參數

2.函數作用域:函數在調用的時候會形成一個私有作用域,在這個作用域下聲明的變量和參數變量外界都訪問不到

3.arguments:是函數中一個類數組參數,它是實參構成的集合

function f(a,b,c){
    console.log(arguments)
}
f(1,2,3)

  

4.箭頭函數

(1)只適合用於匿名函數

    // 匿名函數
    let fn=function(){}  //函數表達式
    fn(12,function(){

    })  // 回調函數

 除了用function 聲明的有名函數 剩下的都是匿名函數

(2)箭頭函數的寫法

let fn =(變量)=>{代碼}

 每個箭頭函數結束的時候一定要return

(3)當只有一個變量的時候可以省略()

let fn=x=>{return x;}

(4)當只有一行代碼,且這行代碼是return xxx;時,可以省略{}和return

let fn=x=>x;

(5)箭頭函數的優勢:箭頭函數沒有this指向,只指向他的父級作用域

(6)箭頭函數獲取實參,不能使用arguments,需要用...arg

let fn=(...arg)=>{
    console.log(arg)
}
fn(1,2,3)

(7)箭頭函數不能定義類函數:因為箭頭函數中的this指向父級作用域,而類中的this指向實例對象

 


免責聲明!

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



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