JavaScript中的问号

我遇到了以下线路

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

什么?:在这方面是什么意思?

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

它有以下forms: conditionvalue-if-truevalue-if-false
想想? 作为“那么”和:作为“其他”。

你的代码相当于

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

为了清晰起见,合适地加上括号

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

意思是返回

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

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

? 是一个三元运算符,它的工作原理就像一个如果结合:

!=表示不等于

所以,这条线的长形将是

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

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

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

它所做的是评估第一个括号中的部分。 如果结果是真的那么后面的部分? 在:返回之前。 如果是错误的,则返回:。

? : ? :这不是三元操作符吗?

var x= expression ? true:false

小心这个。 虽然-1!= true和-1!= false,-1的计算结果为true。 相信我,我已经看到它发生。

所以

-1? “真实的一面”:“虚假的一面”

评估为“真实的一面”