JavaScript中的问号和冒号


Answers:


363

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

它有以下形式:conditionvalue-if-truevalue-if-false
?“ then”和:“ else”视为。

您的代码等同于

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

27
“?” 不是三元运算符;“?:”是三元运算符。谈论“?” 因为三元运算符就像在谈论没有Costello的Abbott,没有Hardy的Laurel,没有Chong的Cheech ....
Jason S

11
好吧,好吧...现在我使用的是一个模糊的代词,快乐吗?:)
Greg

14
简单来说,它是一个三元运算符,在大多数编程语言中,它只是唯一的一个。任何对3个部分进行运算的运算符都是三元运算符,就像addition对前面和后面的表达式进行运算的二进制运算符(例如1 + 2加号在1和2上运算)一样,或者取反是一元运算符(例如-x x的值取反)。
戴维

6
@ Davy8:这可以称为条件运算符
机械蜗牛

如果要检查两个条件怎么办?
Thanos Dodd

38

为了清楚起见,正确地加上了括号

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

意思是返回

  • 255*delta/max 如果max!= 0
  • 0 如果max == 0

7

当用方括号编写时,这可能会更清楚一些:

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

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


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;
}

1

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

var x= expression ? true:false


3
那是使用它的一个例子,但是对于那些只想要TRUE / FALSE的情况,实际上是语句的较短版本:如果'expression'只是其中包含数字或字符串的某个变量,则“ var x = !!表达式”将其转换为布尔结果。
Scott Lahteine 2012年


-3

请注意这一点。尽管-1!= true和-1!= false,但-1的计算结果为true。相信我,我已经看到了它的发生。

所以

-1 “真面”:“假面”

评估为“真实面”


3
“在JavaScript中,真实值是在布尔上下文中求值时认为是真实的值。所有值都是真实值,除非将它们定义为伪造(即,除了false,0,“,”,null,undefined和NaN之外) ”。这就是为什么-1被评估为true的原因。(developer.mozilla.org/en-US/docs/Glossary/Truthy
jobmo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.