JavaScript中的问号和冒号

Ina*_*thi 239 javascript syntax operators conditional-operator

我遇到了以下几行

hsb.s = max != 0 ? 255 * delta / max : 0;
Run Code Online (Sandbox Code Playgroud)

什么的?,并:在这方面是什么意思?

Gre*_*reg 353

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

它有以下形式:conditionvalue-if-true:value-if-false
把它想象?成"然后"和:"别的".

你的代码相当于

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
Run Code Online (Sandbox Code Playgroud)

  • "?" 不是三元运算符; "?:"是三元运算符.谈论"?" 因为三元运营商就像是在谈论没有科斯特洛的雅培,没有哈代的劳雷尔,没有冲的乔奇...... (27认同)
  • 要迂腐,它是一个**三元运算符,恰好是大多数编程语言中唯一的运算符.任何在3个部分上工作的运算符都是三元运算符,就像`addition`是一个二元运算符,它对前后表达式进行操作(例如1 + 2加上1和2运算),或者否定是一元运算符(例如-x,其中x的值被否定). (14认同)
  • 好的,好的......现在我用的是一个含糊不清的代名词,开心吗?:) (11认同)
  • @Davy8:这个可以被称为[tag:conditional-operator]具体. (6认同)

Jas*_*n S 37

为了清晰起见,正确地括号括起来

hsb.s = (max != 0) ? (255 * delta / max) : 0;
Run Code Online (Sandbox Code Playgroud)

意思是回归

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


Nik*_*han 7

使用括号括起来时,这可能会更清楚,如下所示:

hsb.s = (max != 0) ? (255 * delta / max) : 0;
Run Code Online (Sandbox Code Playgroud)

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


Caf*_*eek 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;
}
Run Code Online (Sandbox Code Playgroud)