[英]Question mark and colon in JavaScript
我遇到了以下行
hsb.s = max != 0 ? 255 * delta / max : 0;
做什么?
和:
在这种情况下是什么意思?
为了清楚起见,适当地加括号,它是
hsb.s = (max != 0) ? (255 * delta / max) : 0;
意思是要么返回
255*delta/max
如果 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;
}
?: 是else {}
和if(){}
问题的简写条件。 所以你的代码可以互换:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
? :
? :
这不是三元运算符吗?
var x= expression ? true:false
您所指的称为三元运算符,它本质上是一个基本的if
条件检查,如果三元运算中的代码块有效,则可以编写它来执行运算,否则默认为回退。
三元运算用以下语法编写:
condition ? exprIfTrue : exprIfFalse
condition
一个表达式,其值用作条件。exprIfTrue
一个表达式,如果条件计算为真值(等于或可以转换为真),则计算该表达式。exprIfFalse
如果条件为假则执行的表达式(即,具有可以转换为假的值)。取下面的给定函数,如果提供给函数的数字是偶数,则返回字符串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"
? "Yes"
如果操作为真,则给定的字符串文字将作为此执行的结果自动返回。: "No"
这是该操作中的else
子句,如果条件不满足则返回No
小心这个。 尽管 -1 != true 和 -1 != false,但 A -1 的计算结果为 true。 相信我,我已经看到它发生了。
所以
-1? “真面”:“假面”
评估为“真实的一面”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.