2

我正在玩 Rhino,并注意到这种奇怪的行为似乎是运算符优先级:

js> {}+{}
NaN
js> ''+{}+{}
[object Object][object Object]
js> ''+({}+{})
[object Object][object Object]

我希望表达式''+({}+{})评估为"NaN",因为{}+{}应该首先评估,但这不会发生。我在 V8 和 Firefox 中对此进行了测试,得到了相同的结果。

为什么在这种情况下 Javascript 似乎不遵循括号的标准优先级(4*(1+2)仍然是预期的12)?

4

2 回答 2

6

普通{}语句被视为块语句,因此您的代码实际上是:

{
  //empty block
}


+{}; //Convert object to number

我应该解释一下plain的意思:

这意味着{}在语句上下文中。({})是一个对象,因为括号不能包含语句,它们只能包含表达式。

于 2012-07-09T07:46:37.210 回答
0

这很简单:

{}

是一个语句,并且:

({})

是一个表达式。

只有后者(或任何其他强制解释器将大括号视为空对象的东西)才会导致[object Object].

于 2012-07-09T07:52:17.060 回答