1

重複の可能性:
Javascript では、変数宣言に論理演算子があるとはどういう意味ですか?

簡単な質問です。次のように変数を宣言すると:

    var ballctx = ctx['ballctx'] || createCanvas('game-screen', 'ballctx');

左が先か右が先か?ballctxctx ofが存在しない場合は、新しいキャンバスを作成してほしい。その場合は、代わりにそれを使用します。

4

6 に答える 6

5

まずは左。は、最小評価とも呼ばれる短絡評価||と呼ばれるものを使用します。つまり、左側がfalseの場合、式の右側のみを評価します。

ECMAScript 言語仕様から:

11.11. 二項論理演算子

プロダクション LogicalOREExpression :LogicalORExpression || LogicalANDExpressionは次のように評価されます。

  1. lref を LogicalOREExpression の評価結果とします。
  2. lval を GetValue(lref) とします。
  3. ToBoolean(lval) が true の場合、lval を返します。
  4. LogicalANDExpression を評価した結果を rref とします。
  5. GetValue(rref) を返します。

したがって、あなたの表現では:

ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
^-- lval          ^-- rval

に評価される場合、lval 評価さtrueませrvalん。つまり、 false と評価された場合にのみ新しいキャンバスを作成するctx['ballctx']ため、コードは正しいです。

于 2012-09-10T12:43:07.217 に答える
2

最初に左。ブール値への暗黙のキャストが失敗した場合は、正しい。

于 2012-09-10T12:43:03.550 に答える
1

左の式の値は、trueにほぼ等しい場合に取得されます。それ以外の場合、右の式の値は、値に関係なく取得されます。一部の古いブラウザでは、古くなったJavaScript 1.1仕様に従って、trueまたはfalseのみが返されます。

MDNを参照してください:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Logical_Operators#Summary

于 2012-09-10T12:50:58.687 に答える
1

左のものを試します。真の場合、右の関数は実行されません。

于 2012-09-10T12:43:19.220 に答える
1

真実ならctx['ballctx']_ _

  • createCanvas('game-screen', 'ballctx')評価されない
  • ctx['ballctx']に割り当てられていますballctx

それ以外は

  • createCanvas('game-screen', 'ballctx')評価される
  • createCanvas戻り値が割り当てられるものは何でもballctx
于 2012-09-10T12:43:39.643 に答える
0

最初に左。left が false または未定義の場合、関数のみが実行されます。

于 2012-09-10T12:46:09.927 に答える