學習ES6中的解構賦值小記

變量的解構賦值

1. 數組的解構賦值

默認值可以是其他變量,但該變量必須已經聲明

2. 對象的解構賦值

對象的結構賦值,依據是屬性名的一致,對象的解構賦值更像是這種方式的簡寫:

// key 值相當於匹配的模式,value 值纔是變量
let {foo: foo, bar: bar} = {foo: 'aaa', bar: 'bbb'}

所以對象的解構賦值的內部機制,是先找到同名屬性,然後在賦值給對應的變量,真正賦值的是後者,而不是前者

對象的解構同樣也可以使用默認值,默認值產生的條件是對象的屬性值是嚴格等於 undefiend

思考: let {foo: {bar}} = {bar: 'baz'} 時,報錯的原因(foo 沒有匹配到,爲undefined,undefined的bar屬性顯然是不存在,導致報錯)

同樣的,將一個已經聲明的變量進行解構賦值,必須使用圓括號的形式:

// 對於我們想強行進行賦值的,我們可以給其設置對應的 key 值,然後把他們放在 value 值上,這樣就可以利用解構賦值
let x;
({x} = {x: 1})

解構賦值允許等號左邊的模式中,不防止任何變量名

3. 字符串的解構賦值

如:

// 這裏的字符串被轉換成了類數組
let [a, b, c, d, e] = 'hello'
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
// 所以同樣具有 length 屬性
let {length : len} = 'hello';
len // 5

4. 數值和布爾值的解構賦值

如果等號右邊是數值和布爾值,則會先轉爲對象

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

本質:解構賦值的規則,只要等號右邊的值不是對象或數組,就先將其轉爲對象,由於 undefined 和 null 無法轉爲對象,所以對他們進行解構賦值,都會報錯

5. 函數參數的解構賦值(需要重新看)

同正常解構賦值一樣,參數的解構賦值,在於參數的書寫形式:

// 在這裏,函數內部感受到的只是 x 和 y
function add([x, y]) {
    return x + y
}

同樣的函數參數的結構同樣可以使用默認值

function move ({x = 0, y = 0} = {}) {
    return [x, y]
}

變量的解構賦值的使用場景

  1. 交換變量的值(一個或者多個)
  2. 從函數返回多個值(函數只能返回一個值,所以可以把多個值放進數組或者對象裏面,使用解構賦值來進行接收)
  3. 函數參數的定義(解構賦值可以方便的把一組參數與變量名對應起來)
  4. 提取 JSON 數據(主要是利用對象解構賦值的特點進行提取 JSON 的數據)
  5. 函數參數的默認值(主要是防止在函數內部或多的進行對參數是否爲 undefined 的判斷)
  6. 遍歷 map 結構
  7. 輸入模塊的指定方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章