52

誰かがこのコードを使用しているのを見たばかりです。

ctx = canvas.getContext && canvas.getContext('2d');

このコンテキストでダブルアンパサンドはどのように機能しますか?ctx変数に「true」を割り当てるだけではないでしょうか。

4

2 に答える 2

75

これは、関数を呼び出す前に関数が存在することを確認する一般的な方法です。

次のように動作します ( developer.mozilla.comより):

expr1 && expr2expr1に変換できるかどうかを返しますfalse。それ以外の場合は を返しますexpr2。したがって、ブール値で使用すると、両方のオペランドが;の場合に&&戻ります。それ以外の場合は を返します。truetruefalse

言い換えれば、JavaScript は、必要な場合を除き、オペランドをブール値に強制しません。

4 && 5true ではなく、5 を返します。

あなたの場合、最初の式がundefined(falseに変換可能)である場合、ctxfalseになり、2番目の式は評価されません。最初の式が関数 (に変換できない) の場合、Javascript は 2 番目の式を評価し、その値を変数falseに割り当てます。ctx

于 2012-10-14T01:52:28.560 に答える
25

が実際に関数である場合、の戻り値canvas.getContext('2d')をに割り当てます。ctxcanvas.getContext

左側の部分は、エラーを回避するためのものです。canvasを呼び出す前に、getContextプロパティがあることを確認しますgetContext()。このように、関数が存在しない場合、コードは呼び出さcanvas.getContext()れません。最初にチェックせず、関数が存在しないときに呼び出された場合、エラーがコンソールに記録され、実行が停止します。

于 2012-10-14T01:46:59.243 に答える