关于语法:JavaScript中的问号和冒号

Question mark and colon in JavaScript

我遇到了下一行

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

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


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

它的形式是:conditionvalue-if-truevalue-if-false。把?想象成"那么",把:想象成"其他"。

您的代码等价于

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


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

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

意思是返回

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


最大值!= 0?255*增量/最大值:0;

?是三元运算符,它的工作方式与if结合使用:

!=表示不等于

所以,这条线的长形式是

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

当用括号书写时,这可能会更清楚一些,如下所示:

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

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


这不是三元运算符吗?

var x= expression ? true:false


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

1
2
3
4
5
6
if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN-条件(三元)运算符


小心这个。虽然-1,但-1的计算结果为真!=真和- 1!=假。相信我,我已经看到了。

所以

- 1?"真边":"假边"

计算为"真边"