zishu's blog

zishu's blog

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

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

1668517551012

[ ]+{ }:一個陣列加一個物件。

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

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

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

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

但是 {} 除了表示一個物件之外,也可以表示一個空的 block。在 [] + { } 中,[ ] 被解析為陣列,因此後續的 + 被解析為加法運算子,而 { } 就解析為物件。

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

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