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