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