2016-08-23 441 views
0

雖然在Chrome的開發者控制檯中打轉轉,我注意到的東西,我不明白:JS - 對象文字轉換爲數字?

  • ({})+""評估爲"[object Object]",如我所料
  • {}+""計算結果爲0(數量)

在任一表達式中用{foo:"bar"}代替{}不會改變結果,所以它似乎被解析爲對象文字。用"42"代替""得到42,用"foo"代替,得到NaN

這是怎麼回事嗎?

回答

1

上下文的語法變化。

({})是一個對象文字表達式,用於評估一個新對象,因此代碼實際上是anObject+""。括號在這裏定義爲它們導致代碼被解析爲「(.. some some expression ..)」。

{}+""被解析爲{};+"",因爲{}被解析爲空白塊(與對象文本相對)。這使得相當於+""代碼這產生0

{foo:"bar"}被解析爲塊,具有標籤(「foo」的),以單數表述「欄」。沒有對象文字。

其中{..}將被解析作爲對象常量表達式的一些(有用)的方法:

z = {..} 
({..}) 
f({..}) 
return {..} 
+0

啊,當然。我甚至不知道JS有標籤:D – qxz