JavaScript中的问号和冒号

问题描述 投票:246回答:7

我碰到下一行

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

?:在这种情况下是什么意思?

javascript syntax operators conditional-operator
7个回答
361
投票

它称为Conditional Operator(它是ternary operator)。

具有以下形式:conditionvalue-if-truevalue-if-false?视为“然后”,将:视为“其他”。

您的代码等同于

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

38
投票

为了清楚起见,正确地加上了括号,是

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

意味着返回任一

  • 255*delta/max,如果最大!= 0
  • 0如果最大值== 0

7
投票

[用方括号写成如下内容可能会更清楚:

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

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


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


0
投票

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

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

MDN - Conditional (Ternary) Operator


-3
投票

请注意这一点。尽管-1!= true和-1!= false,但-1的计算结果为true。相信我,我已经看到了它的发生。

so

-1? “真实面”:“错误面”

评估为“真实的一面”

© www.soinside.com 2019 - 2024. All rights reserved.