JavaScript 中的问号和冒号

IT技术 javascript syntax operators conditional-operator
2021-01-19 04:02:55

我遇到了以下行

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

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

6个回答

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

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

你的代码相当于

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
“?” 不是三元运算符;“?:”是三元运算符。谈“?” 因为三元运算符就像谈论没有科斯特洛的雅培,没有哈代的劳雷尔,没有冲的奇奇......
2021-03-14 04:02:55
学究起来,它是一个三元运算符,它恰好是大多数编程语言中唯一的一个。任何对 3 部分起作用的运算符都是三元运算符,就像addition是对前后表达式进行运算的二元运算符(例如 1+2 加号对 1 和 2 进行运算),或者否定是一元运算符(例如 -x其中 x 的值被否定)。
2021-03-15 04:02:55
@Davy8:具体来说,这个可以称为条件运算符
2021-03-22 04:02:55
好吧,好吧……现在我用了一个模棱两可的代词,高兴吗?:)
2021-03-29 04:02:55
如果你想检查两个条件怎么办?
2021-04-01 04:02:55

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

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

意思是返回

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

用括号写成这样可能会更清楚一些,如下所示:

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

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

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
}

MDN - 条件(三元)运算符