在看到阮一峰的ES6教程解構(gòu)賦值,默認(rèn)值時,這個地方?jīng)]太看懂。
原文鏈接
注意,ES6 內(nèi)部使用嚴(yán)格相等運(yùn)算符(===),判斷一個位置是否有值。所以,如果一個數(shù)組成員不嚴(yán)格等于undefined,默認(rèn)值是不會生效的。
function f() {
console.log('aaa');
}
let [x = f()] = [1];
書上說上面這段代碼等價于下面這段
let x;
if ([1][0] === undefined) {
x = f();
} else {
x = [1][0];
}
請問一下這個[1][0]
是哪里來的?不應(yīng)該是下面這樣的嗎?
let x;
if (1 === undefined) {
x = f();
} else {
x = 1;
}
數(shù)組解構(gòu)時,原理是這樣的,把一個或者多個變量放到數(shù)組A中,然后讓這個數(shù)組A等于另一個數(shù)組B,那么解構(gòu)時A數(shù)組某個位置的值就等于B數(shù)組對應(yīng)位置的值。
let [x = f()] = [1];
這段代碼的意思就是,首先創(chuàng)建一個數(shù)組A,數(shù)組A中的第一項(xiàng)是x,然后又有一個數(shù)組B,B = [1].
然后令 A = B.最后的效果就是A[0] = B[0],即x=B[0]
,也即x=[1][0]
。
所以在判斷是不是等于undefined時,要這樣
if([1][0] === undefined)
解構(gòu),解構(gòu),解構(gòu)。。。所以目的是把等號右邊的東西解開,所以肯定是要把[1]
給解開的。
所以let [x]=[1]
,那么x
就是[1][0]
,也就是1
。所以其實(shí)x
的賦值是根據(jù)[1][0]
來判斷的。
不知道說的理解不理解,還是給文檔吧:
https://developer.mozilla.org...