JavaScript中的问号和冒号

时间:2009-11-20 16:54:34

标签: javascript syntax operators conditional-operator

我遇到了以下一行

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

?:在此背景下的含义是什么?

7 个答案:

答案 0 :(得分:340)

它被称为Conditional Operatorternary operator)。

它的形式为:conditionvalue-if-truevalue-if-false
?视为“然后”,将:视为“其他”。

您的代码等同于

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

答案 1 :(得分:34)

为了清晰起见,请正确括号,

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

意思是返回

  • 255*delta/max if max!= 0
  • 0如果max == 0

答案 2 :(得分:7)

如果用括号括起来,可能会更清楚一点:

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

它的作用是评估第一个括号中的部分。如果结果为真则那么后面的部分?并在:返回之前。如果它是假的,那么返回的是:

答案 3 :(得分: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;
}

答案 4 :(得分:1)

? :这不是三元运算符吗?

var x= expression ? true:false

答案 5 :(得分:0)

?:是else {}if(){}问题的简写条件。 因此,您的代码可以与此互换:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN - Conditional (Ternary) Operator

答案 6 :(得分:-3)

小心这一点。 A -1的计算结果为真,尽管-1!= true且-1!= false。相信我,我已经看到它发生了。

所以

-1? “真实的一面”:“虚假的一面”

评估为“真实的一面”