この単純なJavaScript割り当てステートメントで予期しない結果が得られます。
var t = 1 == 1 ? 1 : 0;
undefined
代わりに、vに1が割り当てられることを期待していました。あなたがするなら同じ結果
var t = (1 == 1 ? 1 : 0);
undefined
これが期待どおりに機能しない理由を誰かが説明できますか?
たとえば、Firebugコンソールで_var t = 1 == 1 ? 1 : 0;
_を評価した結果は、undefined
になります。ただし、t
の値は予想どおり_1
_になります。割り当て後にt
を出力してみてください。
Firebug will変数宣言が別の行にある場合に結果を出力します。
_var t;
t = 1 == 1 ? 1 : 0;
_
これは、代入演算の戻り値が代入される値だからです。ただし、var
キーワードが存在する場合、返されるのはVariableStatement宣言の値であり、次のように動作します。
プロダクションVariableStatement:varVariableDeclarationList;次のように評価されます:Evaluate VariableDeclarationList。戻る(通常、空、空)。
ここで、Return (normal, empty, empty).
は、JavaScriptによって内部的に認識される型を指し、コンソールに出力されるものではありません。
参考文献:
それは完全に機能します:
> var t = 1 == 1 ? 1 : 0;
undefined
> t
1
割り当て操作の戻り値はundefined
であり、t
の値ではないと言えます。
編集:しかし実際には 仕様を正しく読んだ場合 、式の値を返す必要があるようです。
@ T.JとしてCrowderは、var
がundefined
の値を担当しているようだと述べました。しかし、それはあなたがvar
を使うべきではないという意味ではありません。あなたが書いたコードは100%正しいです。
これは言語の内部の仕組みに深く関わっていますが、それはあなたが興味を持っていることではないと思います。それについての詳細は、コメントをご覧ください。
古いJavaScriptパーサーでは、括弧で条件を終了する必要があります。
var t = (1 == 1) ? 1 : 0;