2

私はRhinoで遊んでいて、演算子の優先順位のように見えるこの奇妙な動作に気付きました:

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

最初に評価する必要があるため、式''+({}+{})が に評価されることを期待しますが、これは起こりません。これを V8 と Firefox でテストしたところ、同じ結果が得られました。"NaN"{}+{}

この場合、JavaScript が括弧に与えられた標準的な優先順位に従わないように見えるのはなぜですか (4*(1+2)はまだ期待されてい12ます)?

4

2 に答える 2

6

プレーン{}はブロックステートメントとして扱われるため、コードは実際には次のようになります。

{
  //empty block
}


+{}; //Convert object to number

プレーンの意味を説明する必要があります。

{}文の文脈で意味します。({})括弧にはステートメントを含めることができず、式のみを含めることができるため、オブジェクトです。

于 2012-07-09T07:46:37.210 に答える
0

とても簡単です:

{}

ステートメントであり、次のとおりです。

({})

は表現です。

後者 (またはインタープリターに中かっこを空のオブジェクトとして扱うよう強制するもの) のみが[object Object].

于 2012-07-09T07:52:17.060 に答える