我碰到下一行
hsb.s = max != 0 ? 255 * delta / max : 0;
?
和:
在这种情况下是什么意思?
它称为Conditional Operator(它是ternary operator)。
具有以下形式:condition
? value-if-true
:value-if-false
将?
视为“然后”,将:
视为“其他”。
您的代码等同于
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
为了清楚起见,正确地加上了括号,是
hsb.s = (max != 0) ? (255 * delta / max) : 0;
意味着返回任一
255*delta/max
,如果最大!= 00
如果最大值== 0[用方括号写成如下内容可能会更清楚:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
它的作用是评估第一个方括号中的部分。如果结果为真,则?之后的部分?并且在返回:之前。如果为假,则返回:之后的内容。
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;
}
? :
这不是三元运算符吗?
var x= expression ? true:false
?:是else {}
和if(){}
问题的简写条件。因此,您的代码可以与此互换:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
请注意这一点。尽管-1!= true和-1!= false,但-1的计算结果为true。相信我,我已经看到了它的发生。
so
-1? “真实面”:“错误面”
评估为“真实的一面”