誰かがこのコードを使用しているのを見たばかりです。
ctx = canvas.getContext && canvas.getContext('2d');
このコンテキストでダブルアンパサンドはどのように機能しますか?ctx変数に「true」を割り当てるだけではないでしょうか。
誰かがこのコードを使用しているのを見たばかりです。
ctx = canvas.getContext && canvas.getContext('2d');
このコンテキストでダブルアンパサンドはどのように機能しますか?ctx変数に「true」を割り当てるだけではないでしょうか。
これは、関数を呼び出す前に関数が存在することを確認する一般的な方法です。
次のように動作します ( developer.mozilla.comより):
expr1 && expr2
expr1
に変換できるかどうかを返しますfalse
。それ以外の場合は を返しますexpr2
。したがって、ブール値で使用すると、両方のオペランドが;の場合に&&
戻ります。それ以外の場合は を返します。true
true
false
言い換えれば、JavaScript は、必要な場合を除き、オペランドをブール値に強制しません。
4 && 5
true ではなく、5 を返します。
あなたの場合、最初の式がundefined
(falseに変換可能)である場合、ctx
falseになり、2番目の式は評価されません。最初の式が関数 (に変換できない) の場合、Javascript は 2 番目の式を評価し、その値を変数false
に割り当てます。ctx
が実際に関数である場合、の戻り値canvas.getContext('2d')
をに割り当てます。ctx
canvas.getContext
左側の部分は、エラーを回避するためのものです。canvas
を呼び出す前に、getContext
プロパティがあることを確認しますgetContext()
。このように、関数が存在しない場合、コードは呼び出さcanvas.getContext()
れません。最初にチェックせず、関数が存在しないときに呼び出された場合、エラーがコンソールに記録され、実行が停止します。