javascript - ES6 數(shù)組解構(gòu)賦值 默認(rèn)賦值
問(wèn)題描述
在看到阮一峰的ES6教程解構(gòu)賦值,默認(rèn)值時(shí),這個(gè)地方?jīng)]太看懂。原文鏈接
注意,ES6 內(nèi)部使用嚴(yán)格相等運(yùn)算符(===),判斷一個(gè)位置是否有值。所以,如果一個(gè)數(shù)組成員不嚴(yán)格等于undefined,默認(rèn)值是不會(huì)生效的。
function f() { console.log(’aaa’);}let [x = f()] = [1];
書(shū)上說(shuō)上面這段代碼等價(jià)于下面這段
let x;if ([1][0] === undefined) { x = f();} else { x = [1][0];}
請(qǐng)問(wèn)一下這個(gè)[1][0]是哪里來(lái)的?不應(yīng)該是下面這樣的嗎?
let x;if (1 === undefined) { x = f();} else { x = 1;}
問(wèn)題解答
回答1:數(shù)組解構(gòu)時(shí),原理是這樣的,把一個(gè)或者多個(gè)變量放到數(shù)組A中,然后讓這個(gè)數(shù)組A等于另一個(gè)數(shù)組B,那么解構(gòu)時(shí)A數(shù)組某個(gè)位置的值就等于B數(shù)組對(duì)應(yīng)位置的值。
let [x = f()] = [1];
這段代碼的意思就是,首先創(chuàng)建一個(gè)數(shù)組A,數(shù)組A中的第一項(xiàng)是x,然后又有一個(gè)數(shù)組B,B = [1].然后令 A = B.最后的效果就是A[0] = B[0],即x=B[0],也即x=[1][0]。所以在判斷是不是等于undefined時(shí),要這樣
if([1][0] === undefined)回答2:
右邊[1]中的1才是對(duì)應(yīng)x呀,即[1][0]對(duì)應(yīng)x
回答3:解構(gòu),解構(gòu),解構(gòu)。。。所以目的是把等號(hào)右邊的東西解開(kāi),所以肯定是要把[1]給解開(kāi)的。
所以let [x]=[1],那么x就是[1][0],也就是1。所以其實(shí)x的賦值是根據(jù)[1][0]來(lái)判斷的。
不知道說(shuō)的理解不理解,還是給文檔吧:
https://developer.mozilla.org...
相關(guān)文章:
1. mysql - 記得以前在哪里看過(guò)一個(gè)估算時(shí)間的網(wǎng)站2. python - 啟動(dòng)Eric6時(shí)報(bào)錯(cuò):’qscintilla_zh_CN’ could not be loaded3. css3 - 我想要背景長(zhǎng)度變化,而文字不移動(dòng),要怎么修改呢4. android下css3動(dòng)畫(huà)非常卡,GPU也不差啊5. python - 有什么好的可以收集貨幣基金的資源?6. MySQL中的enum類型有什么優(yōu)點(diǎn)?7. javascript - 關(guān)于<a>元素與<input>元素的JS事件運(yùn)行問(wèn)題8. javascript - vue 怎么渲染自定義組件9. javascript - 同步方式寫(xiě)異步到底指什么?10. css3 - 純css實(shí)現(xiàn)點(diǎn)擊特效
