搜尋

首頁  >  問答  >  主體

javascript - ES6 陣列解構賦值 預設賦值

在看到阮一峰的ES6教程解構賦值,預設​​值時,這個地方沒太看懂。
原文連結

注意,ES6 內部使用嚴格相等運算子(===),判斷一個位置是否有值。所以,如果一個陣列成員不嚴格等於undefined,預設值是不會生效的

function f() {
  console.log('aaa');
}

let [x = f()] = [1];

書上說上面這段程式碼等價於下面這段

let x;
if ([1][0] === undefined) {
  x = f();
} else {
  x = [1][0];
}

請問一下這個[1][0]是哪裡來的?不應該是下面這樣的嗎?

let x;
if (1 === undefined) {
  x = f();
} else {
  x = 1;
}
滿天的星座滿天的星座2769 天前1103

全部回覆(3)我來回復

  • 学习ing

    学习ing2017-06-07 09:26:42

    數組解構時,原理是這樣的,把一個或多個變數放到數組A中,然後讓這個數組A等於另一個數組B,那麼解構時A數組某個位置的值就等於B數組對應位置的值。

    let [x = f()] = [1];

    這段程式碼的意思是,先建立一個陣列A,陣列A中的第一項是x,然後又有一個陣列B,B = [1].
    然後令A = B.最後的效果就是A[ 0] = B[0],即x=B[0],也即x=[1][0]
    所以在判斷是不是等於undefined時,要這樣

    if([1][0] === undefined)

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-07 09:26:42

    右邊[1]中的1才是對應x呀,即[1][0]對應x

    回覆
    0
  • 欧阳克

    欧阳克2017-06-07 09:26:42

    解構,解構,解構。 。 。所以目的是把等號右邊的東西解開,所以一定是要把[1]給解開的。

    所以let [x]=[1],那麼x就是[1][0],也就是1。所以其實x的賦值是根據[1][0]來判斷的。

    不知道說的理解不理解,還是給文件吧:

    https://developer.mozilla.org...

    回覆
    0
  • 取消回覆