首頁  >  文章  >  web前端  >  暈!面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什麼

暈!面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什麼

藏色散人
藏色散人轉載
2023-04-12 15:29:22919瀏覽
這篇文章為大家帶來了關於前端的相關知識,其中主要跟大家分享一道有關console.log的面試題,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。

前言

訪談題console.log(([][[]] [])[ !![]] ([] {})[ !![] !![]])輸出什麼?面試遇到了這一個面試題,該面試題考察了類型轉換,隱式類型轉換,操作符等,我沒答出來,不是我不會,是我光看題就很暈了。然而它確實是面試題,那就試著解決看看咯。

暈!面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什麼

解決這個題目所需的知識

  • 「 」:一元會執行與使用Number()一樣的轉換
  • 如果號是兩個數相加,任一操作數是物件、數值或布爾,則呼叫它們的toString方法轉為字串
  • “!”:非運算符,這個操作總是會傳回布林值
  • “!!”:強制轉為布林值

解決這個題目([][[]] [])[ !![]] ([] {}) [ !![] !![]]

首先我們要先理清它的執行順序

首先執行([][[]] []) ,先執行裡面的[][[]],在計算[][[]]時,其實就是執行[]空數組裡面key為[]的值

  1. 首先,JavaScript 引擎解析空數組[]。空數組沒有任何元素。
  2. 接下來,引擎嘗試使用 [] 作為屬性名稱來存取空數組的屬性。在這種情況下,由於 [] 本身是一個數組,JavaScript 引擎會嘗試將其轉換為字串。由於 [] 為空數組,轉換成字串後結果為一個空字串 ""
  3. 最後,引擎會嘗試存取空數組中名為 "" 的屬性。由於這個屬性並不存在於空數組中,所以結果為 undefined

所以,執行 [][[]] 的結果是 undefined

那麼([][[]] [])接下去執行就是(undefined []) 將會執行隱含型別轉換,將 undefined轉換為字串"undefined",將[]轉為“”,然後將兩個字串拼接在一起。因此,結果是"undefined"

其次執行[ !![]],!![]空數組轉布林值為true,一元操作服會轉為數值, true就是將true轉換為數字1。得到的結果就是[1]。於是我們就可以得到([][[]] [])[ !![]]undefined[1]這個的結果就是字串'n'

接下來就是執行([] {})[ !![] !![]] 這一部分,再將這部分的結果和上面的結果相加

  1. 先執行([] {}),  計算[] {}。這將觸發隱式類型轉換,將空物件轉換為字串"[object Object]",然後將兩個字串拼接在一起。因此,結果是'[object Object]'

  2. 再執行[ !![] !![]], !![]前面有解析過得到的是1,所以這一部分執行過後得到的是數值1相加1 1,得到的結果是[2]

  3. 那麼這兩部分合起來就是'[object Object]'[2],就是字串的第三個值b

最後將前面部分得到的結果'n' 和後面部分得到的結果'b' 相加,得到最後的結果'nb'

總結:這個題目一時解決不了的話,可能有以下幾個原因,第一個就是不太清楚執行順序,其次就是不太理解[][[]]這個,其實就是取得空數組key為[]的值,又因為陣列的key為字串,所以會將[]轉為''是找不到的所以回傳undefined。現在你會這道面試題了嗎?

推薦學習:《web前端開發影片教學

#

以上是暈!面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除