JavaScript中的问号和冒号

JavaScript中的问号和冒号,javascript,syntax,operators,conditional-operator,Javascript,Syntax,Operators,Conditional Operator,我遇到了下面这一行 hsb.s = max != 0 ? 255 * delta / max : 0; ?和:在本文中是什么意思?:

我遇到了下面这一行

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

在本文中是什么意思?



var x=表达式?真:假

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

hsb.s = (max != 0) ? (255 * delta / max) : 0;
也就是说返回

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

如果用括号写的话,可能会更清楚一些,如下所示:

hsb.s = (max != 0) ? (255 * delta / max) : 0;
它所做的是评估第一个括号中的零件。如果结果是真的,那么后面的部分是什么?在:返回之前。如果为false,则返回:后面的内容。

它被称为(这是一个)

其形式为:
条件
<代码>值(如果为真)
值(如果为假)

想象成“then”,把
想象成“else”

您的代码相当于

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
是一个三元运算符。如果与

=表示不相等

所以,这条线的长形式是

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

小心这个。虽然-1!=真与-1!=错。相信我,我亲眼目睹了这一切

所以

-1号?“真实面”:“虚假面”


计算结果为“true side”

?:是
else{}
if(){}
问题的简写条件。 因此,您的代码可以互换为:

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

“?”不是三元运算符;“?:”是三元运算符。谈论“?”作为三元运算符就像谈论没有Costello的Abbott、没有Hardy的Laurel、没有Chong的Cheech……好吧,好吧。。。现在我用了一个模棱两可的代词,happy?:)迂腐地说,这是一个三元运算符,它恰好是大多数编程语言中唯一的一个。任何作用于三个部分的运算符都是三元运算符,就像加法是作用于前面和后面表达式的二元运算符一样(例如,1+2加号作用于1和2),或者求反是一元运算符(例如,-x,其中x的值为反)@Davy8:这一个可以被称为是具体的。如果你想检查两个条件呢?这是一个使用它的例子,但实际上有一个简短的版本,对于那些你只需要真/假的情况:如果“表达式”只是一个带有数字或字符串的变量,“var x=!!expression”“在JavaScript中,truthy值是在布尔上下文中计算时被视为true的值。所有值都是truthy,除非它们被定义为falsy(即,除false、0、”、null、未定义和NaN之外)。”这就是-1被计算为true的原因。()
if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}