JavaScriptの疑問符とコロン


回答:


363

これは、条件演算子3項演算子)と呼ばれます。

それの形式は次のとおりconditionです。value-if-true:を「then」および「else」とvalue-if-false
考えてください。?:

あなたのコードは

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

27
「?」三項演算子ではありません。「?:」は三項演算子です。について話す "?" 三項演算子は、コステロなしのアボット、ハーディなしのローレル、チョンなしのチーチについて話しているようなものです...
Jason S

11
わかりました、わかりました...今はあいまいな代名詞を使用しています、幸せですか?:)
グレッグ

14
わかりやすく言うと、これ 3項演算子であり、ほとんどのプログラミング言語で唯一の演算子です。3つの部分で機能する演算子additionは、前後の式で動作する2項演算子と同様に、3項演算子です(例:1 + 2プラスは1と2で動作します)、または否定は単項演算子(例:-x) xの値は否定されます)。
Davy8

6
@ Davy8:これは具体的に条件付き演算子と呼ぶことができます。
かたつむり

2つの条件をチェックしたい場合はどうなりますか?
Thanos Dodd

38

わかりやすくするために適切に括弧を付けています。

hsb.s = (max != 0) ? (255 * delta / max) : 0;

どちらかを返す意味

  • 255*delta/max 最大!= 0の場合
  • 0 最大== 0の場合

7

これは、次のように角かっこで書くと、おそらく少しわかりやすくなります。

hsb.s = (max != 0) ? (255 * delta / max) : 0;

最初の括弧内の部分を評価します。結果がtrueの場合、?の後の部分 :が返される前。falseの場合、:に続くものが返されます。


7
hsb.s = max != 0 ? 255 * delta / max : 0;

?三項演算子です。とif連動して機能します:

!= 等しくないことを意味します

したがって、この行の長い形式は次のようになります

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

1

? : これは三項演算子ではないですか?

var x= expression ? true:false


3
これはその使用例の1つですが、実際にはステートメントの短いバージョンがあります。TRUE/ FALSEが必要な場合のために、「式」が数値または文字列を含む変数の場合、「var x = !!式」はブール結果になります。
Scott Lahteine、2012年


-3

これに注意してください。-1!= trueおよび-1!= falseですが、-1はtrueと評価されます。私を信じて、私はそれが起こるのを見てきました。

そう

-1?「真側」:「偽側」

「真の側面」と評価される


3
「JavaScriptでは、真の値はブールコンテキストで評価されたときに真と見なされる値です。偽として定義されていない限り、すべての値は真です(つまり、false、0、 ""、null、未定義、およびNaNを除く)。 」これが、-1がtrueと評価される理由です。(developer.mozilla.org/en-US/docs/Glossary/Truthy
jobmo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.