261

我遇到了以下行

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

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

4

8 回答 8

375

它被称为条件运算符(它是一个三元运算符)。

它的形式为:condition? value-if-true:value-if-false
将其?视为“then”和:“else”。

您的代码相当于

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
于 2009-11-20T16:58:30.227 回答
40

为了清楚起见,适当地加括号,它是

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

意思是要么返回

  • 255*delta/max如果最大值!= 0
  • 0如果最大值 == 0
于 2009-11-20T16:57:35.630 回答
7

用括号写出来可能会更清楚一些,如下所示:

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

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

于 2009-11-20T16:58:08.387 回答
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;
}
于 2009-11-20T16:58:52.463 回答
1

?: 是else {}if(){}问题的简写条件。所以你的代码可以互换:

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

MDN - 条件(三元)运算符

于 2019-02-16T17:55:07.270 回答
0

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

var x= expression ? true:false

于 2009-11-20T16:56:29.363 回答
0

您所指的称为三元运算符,它本质上是一种基本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"如果该操作为真,则给定的字符串文字将作为此执行的结果自动返回。
  • : "No"这是else此操作中的子句,如果不满足条件则No返回。
于 2021-11-30T00:43:59.070 回答
-4

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

所以

-1?“真面”:“假面”

评估为“真实的一面”

于 2017-02-15T17:07:31.523 回答