您好,登錄后才能下訂單哦!
這篇“PHP面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“PHP面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什么”文章吧。
面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什么?
“+”:一元+會執行與使用Number()一樣的轉換
如果+號是兩個數相加,任一操作數是對象、數值或者布爾,則調用它們的toString方法轉為字符串
“!”:非操作符,這個操作始終返回布爾值
“!!”:強制轉為布爾值
首先我們要先理清它的執行順序
首先執行([][[]] + [])
,先執行里面的[][[]]
,在計算 [][[]]
時,其實就是執行[]空數組里面key為[]的值
首先,JavaScript 引擎解析空數組 []
。空數組沒有任何元素。
接下來,引擎嘗試使用 []
作為屬性名來訪問空數組的屬性。在這種情況下,由于 []
本身是一個數組,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'
以上就是關于“PHP面試題console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])輸出什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。