zishu's blog

zishu's blog

一个热爱生活的博主。https://zishu.me

js中 [ ]+{ } 和 { }+[ ] 的區別

1668517551012

[ ]+{ }:一個數組加一個對象。

加法會進行隱式類型轉換,規則是調用其 valueOf () 或 toString () 以取得一個非對象的值 (primitive value)。

如果兩個值中的任何一個是字符串,則進行字符串串接,否則進行數字加法。[] 和 {} 的 valueOf () 都返回對象自身,所以都會調用 toString (),最後的結果是字符串串接。

[].toString () 返回空字符串,({ }).toString () 返回 "[object Object]",最後的結果就是 "[object Object]"。

{ }+[ ]:看上去應該和上面一樣。

但是 {} 除了表示一個對象之外,也可以表示一個空的 bock。在 [] + { } 中,[ ] 被解析為數組,因此後續的 + 被解析為加法運算符,而 { } 就解析為對象。

但在 {} + [] 中,{ } 被解析為空的 bock,隨後的 + 被解析為正號運算符。即實際上成了:{∥empty block}+[ ],即對一個空數組執行正號運算,實際上就是把數組轉型為數字。首先調用.valueOf (),返回數組自身,不是 primitive value,因此繼續調用 [ ].toString (),返回空字符串。空字符串轉型為數字,返回 0,即最後的結果。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。