0
雖然在Chrome的開發者控制檯中打轉轉,我注意到的東西,我不明白:JS - 對象文字轉換爲數字?
({})+""
評估爲"[object Object]"
,如我所料{}+""
計算結果爲0
(數量)
在任一表達式中用{foo:"bar"}
代替{}
不會改變結果,所以它似乎被解析爲對象文字。用"42"
代替""
得到42
,用"foo"
代替,得到NaN
。
這是怎麼回事嗎?
雖然在Chrome的開發者控制檯中打轉轉,我注意到的東西,我不明白:JS - 對象文字轉換爲數字?
({})+""
評估爲"[object Object]"
,如我所料{}+""
計算結果爲0
(數量)在任一表達式中用{foo:"bar"}
代替{}
不會改變結果,所以它似乎被解析爲對象文字。用"42"
代替""
得到42
,用"foo"
代替,得到NaN
。
這是怎麼回事嗎?
上下文的語法變化。
({})
是一個對象文字表達式,用於評估一個新對象,因此代碼實際上是anObject+""
。括號在這裏定義爲它們導致代碼被解析爲「(.. some some expression ..)」。
{}+""
被解析爲{};+""
,因爲{}被解析爲空白塊(與對象文本相對)。這使得相當於+""
代碼這產生0
{foo:"bar"}
被解析爲塊,具有標籤(「foo」的),以單數表述「欄」。沒有對象文字。
其中{..}
將被解析作爲對象常量表達式的一些(有用)的方法:
z = {..}
({..})
f({..})
return {..}
啊,當然。我甚至不知道JS有標籤:D – qxz