我看到了下面这行代码
hsb.s = max != 0 ? 255 * delta / max : 0;
在这个上下文中,?
和:
代表什么意思?
我看到了下面这行代码
hsb.s = max != 0 ? 255 * delta / max : 0;
在这个上下文中,?
和:
代表什么意思?
if
/else if
/else
代替。 - T.J. Crowder为了清晰起见,正确地括号化后,它是
hsb.s = (max != 0) ? (255 * delta / max) : 0;
意思是返回以下内容之一:
255*delta/max
,如果max != 0
0
,如果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;
}
当使用括号进行书写时,可能更加清晰明了,如下所示:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
?: 是 else {} 和 if(){} 问题的简写条件语句。因此,您的代码可以互换为以下内容:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
if
条件检查,可以编写以执行操作,如果三元操作中的代码块有效,则执行该操作,否则默认为回退。condition ? exprIfTrue : exprIfFalse
condition
一个表达式,其值用作条件。exprIfTrue
如果条件计算结果为真(等于或可以转换为 true),则计算的表达式。exprIfFalse
如果条件计算结果为假(即具有可以转换为 false 的值),则执行的表达式。考虑下面给定的函数,如果提供给函数的数字是偶数,则应返回字符串 Yes
,否则返回 No
。
function isEven(num) {
return (num % 2 == 0) ? "Yes" : "No";
}
console.log("2: " + isEven(2));
console.log("3: " + isEven(3));
上述操作可以分解为以下几个部分:
(num % 2 == 0)
| 这是一个简单的if
语句条件,用于检查括号内的表达式是否为真。? "Yes"
如果条件为真,则自动返回给定的字符串字面值作为此执行的结果。: "No"
这是此操作中的else
子句,如果未满足条件,则返回No
。? :
这不是三元运算符吗?
var x= expression ? true:false
在编程中要小心这一点。虽然-1!= true且-1!= false,但-1会被评估为true。相信我,我曾经见过它发生。
所以
-1?“真侧”:“假侧”
评估为“真侧”