簡単な質問です。次のように変数を宣言すると:
var ballctx = ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
左が先か右が先か?ballctx
ctx ofが存在しない場合は、新しいキャンバスを作成してほしい。その場合は、代わりにそれを使用します。
簡単な質問です。次のように変数を宣言すると:
var ballctx = ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
左が先か右が先か?ballctx
ctx ofが存在しない場合は、新しいキャンバスを作成してほしい。その場合は、代わりにそれを使用します。
まずは左。は、最小評価とも呼ばれる短絡評価||
と呼ばれるものを使用します。つまり、左側がfalseの場合、式の右側のみを評価します。
ECMAScript 言語仕様から:
プロダクション LogicalOREExpression :
LogicalORExpression || LogicalANDExpression
は次のように評価されます。
- lref を LogicalOREExpression の評価結果とします。
- lval を GetValue(lref) とします。
- ToBoolean(lval) が true の場合、lval を返します。
- LogicalANDExpression を評価した結果を rref とします。
- GetValue(rref) を返します。
したがって、あなたの表現では:
ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
^-- lval ^-- rval
に評価される場合、lval
評価されtrue
ませrval
ん。つまり、 false と評価された場合にのみ新しいキャンバスを作成するctx['ballctx']
ため、コードは正しいです。
最初に左。ブール値への暗黙のキャストが失敗した場合は、正しい。
左の式の値は、trueにほぼ等しい場合に取得されます。それ以外の場合、右の式の値は、値に関係なく取得されます。一部の古いブラウザでは、古くなったJavaScript 1.1仕様に従って、trueまたはfalseのみが返されます。
MDNを参照してください:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Logical_Operators#Summary
左のものを試します。真の場合、右の関数は実行されません。
真実ならctx['ballctx']
_ _
createCanvas('game-screen', 'ballctx')
評価されないctx['ballctx']
に割り当てられていますballctx
それ以外は
createCanvas('game-screen', 'ballctx')
評価されるcreateCanvas
戻り値が割り当てられるものは何でもballctx
最初に左。left が false または未定義の場合、関数のみが実行されます。