2009-09-04 8 views
15

私は大きなJSライブラリを使用して、キャンバス内で特定の描画操作を実行しています。ライブラリーのコードを見直して(私は適応性のある変更を行うために)、 '||'演算子は必ずブール値に評価すべきではありません。これはこれが別の演算子であることを意味するのでしょうか?例は次のとおりです。Javascript ||オペレータ

var $time = Date.now || function(){ 
return +new Date; 
}; 
+0

何らかの理由でDate.nowが0を返した場合、代わりに$ timeを関数の戻り値に設定すると思います...? – peirix

+0

@peirix:あなたは間違っていました。 $ timeは、現在のDateを返す関数になります。これは、定義されている(偽でない)場合はDate.nowのエイリアス、それ以外の場合は提供される関数に設定されます。 –

+0

ああ、そういうわけで答えとして設定しなかったのです。コメントをdownvotingする方法はありません:だから、これがどのように動作するのかを知るには、 'Date.now'変数についてもっと知る必要があります。 – peirix

答えて

13

それ以外trueまたは最後のオペランドに変換できる場合|| operatorは最初のオペランドに評価されます。したがって、あなたの例では$timeDate.now(存在する場合)または宣言された関数(そうでない場合)になります。

+0

最初の非Falseオペラント、つまりです。 –

+10

trueに変換できる最初のオペランドではありません。最後の式は、たとえfalseに変換されたとしても使用されます。 – googletorp

0

これは非常に一般的なjavascriptです。 Data.nowがtrueと評価された場合、$ timeはそれに設定され、それ以外の場合は関数に設定されます。

+0

関数は閉じ中括弧に()が付いていないので、$ timeは関数に設定され、出力されません。 – Quentin

+0

ああ、あなたは間違いなく急いでそれを逃した。更新しました。 – googletorp

0

DateTime.now変数が存在しない場合は、代わりに+new Dateという結果が返されます。

+1

DateTime.nowが ''、0、false、nullであることもあります –

0

この例では、演算子を使用して$timeに値を割り当てています。

Date.nowがfalseと評価された場合、$timeには、||演算子(この場合は関数)の右側の値が割り当てられます。 Date.nowが真、それ短期cicuitsに評価し、$time受け入れ答えが既にあり

17

にDate.nowの値を割り当てますが、私はOR-演算子は、デフォルト・オペレータと呼ばれていることを、言及したい場合は、なぜならブール値を返さず、代わりに左または右の引数を返すからです。

同じことがAND-Operatorにも当てはまります。これは、guard-Operatorとも呼ばれます。

詳細はcrockford's Survey of the JavaScript Programming Languageをチェックアウト:

& &演算子は、一般的に論理的と呼ばれています。ガードと呼ぶこともできます。最初のオペランドがfalse、null、undefined、 ""(空文字列)、または0の場合、最初のオペランドを返します。それ以外の場合は、第2オペランドを返します。これにより、ヌルチェックを書く便利な方法が提供されます。

var value = p & & p.name;/*名前値は はpに値があればpから取り出され、エラーは回避されます。 */

The ||演算子は一般的に論理式または論理式と呼ばれます。デフォルトとも呼ばれます。最初のオペランドがfalse、null、undefined、 ""(空文字列)、または数値0の場合、第2オペランドを返します。それ以外の場合は、最初のオペランドを返します。これにより、デフォルト値を指定する便利な方法が提供されます。

value = v || 10;/* vの値を使用しますが、v に値がない場合は、代わりに10を使用してください。 */