Question mark and colon in JavaScript
我遇到了下一行
1 | hsb.s = max != 0 ? 255 * delta / max : 0; |
在这种情况下,
它被称为条件运算符(它是三元运算符)。
它的形式是:
您的代码等价于
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; |
它的作用是评估第一个括号中的部分。如果结果为真,那么后面的部分?在:返回之前。如果为假,则返回:后面的内容。
这不是三元运算符吗?
?:是
1 2 3 4 5 6 | if(max != 0){ hsb.s = 225 * delta / max } else { hsb.s = 0 } |
MDN-条件(三元)运算符
小心这个。虽然-1,但-1的计算结果为真!=真和- 1!=假。相信我,我已经看到了。
所以
- 1?"真边":"假边"
计算为"真边"