在看到阮一峰的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;
}
數組解構時,原理是這樣的,把一個或多個變數放到數組A中,然後讓這個數組A等於另一個數組B,那麼解構時A數組某個位置的值就等於B數組對應位置的值。
這段程式碼的意思是,先建立一個陣列A,陣列A中的第一項是x,然後又有一個陣列B,B = [1].
然後令A = B.最後的效果就是A[ 0] = B[0],即
x=B[0]
,也即x=[1][0]
。所以在判斷是不是等於undefined時,要這樣
右邊[1]中的1才是對應x呀,即
[1][0]
對應x解構,解構,解構。 。 。所以目的是把等號右邊的東西解開,所以一定是要把
[1]
給解開的。所以
let [x]=[1]
,那麼x
就是[1][0]
,也就是1
。所以其實x
的賦值是根據[1][0]
來判斷的。不知道說的理解不理解,還是給文件吧:
https://developer.mozilla.org...