2012-01-11 16 views
1

私は下に、いくつかのJavaScriptの構文を理解する質問があります。具体的に条件文/構文の混乱

var myObject = { 
    value: 0; 
    increment: function (inc) { 
     this.value += typeof inc === 'number' ? inc : 1; 
    } 
}; 
myObject.increment(); 
document.writeln(myObject.value); // 1 
myObject.increment(2); 
document.writeln(myObject.value); // 3 

typeof inc === 'number' 

その後:

this.value += typeof inc === 'number' ? inc : 1; 

は、ifと言って、この行です:

this.value += inc 

これを理解するのに役立つリソースやリソースについて考えていただければ幸いです。

+0

これを割り当てます"inc"が有効な数値であればそれをインクリメントに使用し、それ以外の場合は1を使用すると言っています。また、this.value + =(isNaN(inc)?1:inc); –

答えて

1

これは正しく、三項演算子と呼ばれます。ステートメントがtrueに解決された場合、最初のオプションは2番目のオプションを解決しない場合は最初のオプションを行います。確かにtypeof inc === 'number'が、その後this.valueincを追加する場合と言っているし、そうでない場合this.valueに1を追加する/他

if (typeof inc === 'number') this.value += inc; 
else this.value++; 
+0

あなたの返信ありがとう – zallarak

1

場合、それは簡単に分けることができます。このパターンは、条件が真の場合は:の左側を返し、falseの場合は:の右側を戻す三項演算子の例です。それ+=オペレータに番号を返すために使用され、しかしこの場合には

// Assign the greater of y and z to x (or z if they're equal) 
var x = y > z ? y : z; 

// equivalent to: 
if (y > z) { 
    var x = y; 
} 
else var x = z; 

三元操作が幾分より一般的のような割り当てのために使用されます。

+0

あなたの説明とあなたが書いたサンプルコードのため、ありがとう@マイケル。 – zallarak

1

オペレータはternaryです。

this.value += typeof inc === 'number' ? inc : 1; 

三項演算子は、もし/他の単なる簡略版である

if (typeof inc === 'number') { 
    this.value += inc; 
} else { 
    this.value += 1; 
} 
+0

ありがとう!どちらのバリエーションにもスピードメリットはありますか?私はそうではないと思うだろう。そうであれば、ちょうど誰かがjavascriptを使っているように、私は後者をスタイルとして採用することを検討するだろう。 – zallarak

+0

速度の利点はありません、私は後者も使用します。それはちょっと読みやすいです。 – Joe

+0

これは条件演算子です。三項演算子の例です。 –

1

と同じです。これは、より良いテストされている状態を参照する括弧内の条件式を置くことが時々便利です:「数」でtypeof演算INCの結果は、その後this.valueする株式会社を割り当てた場合

ので
this.value = (typeof inc === 'number') ? inc : 1; 

を、そうでない場合は1

+0

ありがとうございました! – zallarak