訪談題console.log(([][[]] [])[ !![]] ([] {})[ !![] !![]])輸出什麼?面試遇到了這一個面試題,該面試題考察了類型轉換,隱式類型轉換,操作符等,我沒答出來,不是我不會,是我光看題就很暈了。然而它確實是面試題,那就試著解決看看咯。
首先我們要先理清它的執行順序
首先執行([][[]] [])
,先執行裡面的[][[]]
,在計算[][[]]
時,其實就是執行[]空數組裡面key為[]的值
[]
。空數組沒有任何元素。 []
作為屬性名稱來存取空數組的屬性。在這種情況下,由於 []
本身是一個數組,JavaScript 引擎會嘗試將其轉換為字串。由於 []
為空數組,轉換成字串後結果為一個空字串 ""
。 ""
的屬性。由於這個屬性並不存在於空數組中,所以結果為 undefined
。 所以,執行 [][[]]
的結果是 undefined
。
那麼([][[]] [])
接下去執行就是(undefined [])
將會執行隱含型別轉換,將 undefined
轉換為字串"undefined"
,將[]轉為“”,然後將兩個字串拼接在一起。因此,結果是"undefined"
其次執行[ !![]],!![]空數組轉布林值為true,一元操作服會轉為數值, true就是將true
轉換為數字1
。得到的結果就是[1]
。於是我們就可以得到([][[]] [])[ !![]]
為undefined[1]
這個的結果就是字串'n'
接下來就是執行([] {})[ !![] !![]]
這一部分,再將這部分的結果和上面的結果相加
先執行([] {})
, 計算[] {}
。這將觸發隱式類型轉換,將空物件轉換為字串"[object Object]"
,然後將兩個字串拼接在一起。因此,結果是'[object Object]'
。
再執行[ !![] !![]], !![]
前面有解析過得到的是1,所以這一部分執行過後得到的是數值1相加1 1
,得到的結果是[2]
。
那麼這兩部分合起來就是'[object Object]'[2]
,就是字串的第三個值b
最後將前面部分得到的結果'n'
和後面部分得到的結果'b'
相加,得到最後的結果'nb'
總結:這個題目一時解決不了的話,可能有以下幾個原因,第一個就是不太清楚執行順序,其次就是不太理解[][[]]
這個,其實就是取得空數組key為[]
的值,又因為陣列的key為字串,所以會將[]
轉為''
是找不到的所以回傳undefined。現在你會這道面試題了嗎?
推薦學習:《web前端開發影片教學》
以上是暈!面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!