2012-01-23 20 views
0

私はどのように三項演算子の仕事を理解しようとしていると私は、この例に出くわした:奇妙三項演算子のJavascript

b.d >= mystr.length && (function1(b, a), a=0); 

を& &は何を意味するのでしょうか?それはAND演算子のように使用されていますか?これはどのようにして通常の声明に変換されますか? a = 0の前の昏睡はどういう意味ですか?ありがとう!

+4

これは三項演算子ではありません。 –

+1

&&は多国語であるため、ANDです。しかし、また、重複のhttp://stackoverflow.com/q/8916679/422184 – Ktash

+0

これはひどく読めないコードです。誰がそのようなコードを書いていますか? ಠ_ಠ –

答えて

1

&&はAND演算子です。それの左側が真であれば、右側を評価して返します。 ,はカンマ演算子です。 (カンマ演算子は、左右を評価し、左から右に戻り、右辺を返します)。したがって、このコードは次のようである:

if (b.d>=mystr.lengh) { 
function1(b,a); 
a=0; 
} 

(あなたのコードの戻り0点を除いて)

(私の母国語がCなので、多分私は間違っているんだけど、私はこのケースでは、Javascriptの作品のようなことを考えますC)

0

&&演算子は論理AND演算子です。式を左から右に評価し、最初の偽値または最後の式の値を返します。

最後の式になると、その値を返します。したがって

var x = (1 < 2) && (4 > 3) && 'fred'; 

セットX一方、 "フレッド" に:

var y = (1 < 2) && 0 && 'fred'; 

セットY0します。

2

これは三元ではありません。

また、そのグループ化オペレータ内部コンマは、基本的には例が常にfalsyある(偽または0に評価することが0

であり、グループは常に最後の式a=0の値を返すことを保証します)。

編集:

完全を期すために、ここでは三項演算子です:

a > b ? functionIfTrue() : functionIfFalse(); 

それは論理的に同じです。

if (a > b){ 
    functionIfTrue(); 
} else { 
    functionIfFalse(); 
} 
+0

ありがとうございました。それは普通の声明のように見えるだろうか? "> ="とは何ですか?三元演算子ではありませんか?どのような条件下で関数が呼び出されるのでしょうか? – user1015551

+0

'> ='は "より大きいか等しい"を意味します。三項演算子は、if/else文を書くための簡潔な方法です。 この場合、 'function1'は' mystr.length'が 'b.d'の値よりも小さい場合にのみ呼び出されます。 'mystr.length'が' bより小さくない場合。d& 'の後の残りの文は重要ではないため、評価されません。 –