Question mark and colon in JavaScript

2018-12-31 02:53发布

I came across the following line

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

What do the ? and : mean in this context?

6条回答
临风纵饮
2楼-- · 2018-12-31 03:15

This is probably a bit clearer when written with brackets as follows:

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

What it does is evaluate the part in the first brackets. If the result is true then the part after the ? and before the : is returned. If it is false, then what follows the : is returned.

查看更多
谁念西风独自凉
3楼-- · 2018-12-31 03:22

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

? is a ternary operator, it works like an if in conjunction with the :

!= means not equals

So, the long form of this line would be

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}
查看更多
心情的温度
4楼-- · 2018-12-31 03:26

Be careful with this. A -1 evaluates to true although -1 != true and -1 != false. Trust me, I've seen it happen.

so

-1 ? "true side" : "false side"

evaluates to "true side"

查看更多
余欢
5楼-- · 2018-12-31 03:31

Properly parenthesized for clarity, it is

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

meaning return either

  • 255*delta/max if max != 0
  • 0 if max == 0
查看更多
栀子花@的思念
6楼-- · 2018-12-31 03:31

? : isn't this the ternary operator?

var x= expression ? true:false

查看更多
余生请多指教
7楼-- · 2018-12-31 03:34

It is called the Conditional Operator (which is a ternary operator).

It has the form of: condition ? value-if-true : value-if-false
Think of the ? as "then" and : as "else".

Your code is equivalent to

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
查看更多
登录 后发表回答