2016-08-23 170 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