Question mark and colon in JavaScript

JavascriptSyntaxOperatorsConditional Operator

Javascript Problem Overview


I came across the following line

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

What do the ? and : mean in this context?

Javascript Solutions


Solution 1 - Javascript

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;

Solution 2 - Javascript

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

Solution 3 - Javascript

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.

Solution 4 - Javascript

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;
}

Solution 5 - Javascript

?: is a short-hand condition for else {} and if(){} problems. So your code is interchangeable to this:

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

MDN - Conditional (Ternary) Operator

Solution 6 - Javascript

? : isn't this the ternary operator?

var x= expression ? true:false

Solution 7 - Javascript

What you are referring to is called a ternary operator, it is essentially a basic if condition check that can be written to execute an operation if the block of code within the ternary operation is valid, otherwise default to a fallback.

A ternary operation is written in the following syntax:

condition ? exprIfTrue : exprIfFalse
  • condition An expression whose value is used as a condition.
  • exprIfTrue An expression which is evaluated if the condition evaluates to a truthy value (one which equals or can be converted to true).
  • exprIfFalse An expression which is executed if the condition is falsy (that is, has a value which can be converted to false).
Example

Take the given function below which should return the string Yes if the number provided to the function is even, otherwise return No.

function isEven(num) {
    return (num % 2 == 0) ? "Yes" : "No";
}

console.log("2: " + isEven(2));
console.log("3: " + isEven(3));

Explanation

The operation above broken down:

  • (num % 2 == 0) | This is a simple if statement condition to check if the expression within the brackets is true.
  • ? "Yes" If the operation is true, the string literal given is automatically returned as a result of this execution.
  • : "No" This is the else clause in this operation, if the condition is not met then No is returned.

Solution 8 - Javascript

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"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionInaimathiView Question on Stackoverflow
Solution 1 - JavascriptGregView Answer on Stackoverflow
Solution 2 - JavascriptJason SView Answer on Stackoverflow
Solution 3 - JavascriptNikolas StephanView Answer on Stackoverflow
Solution 4 - JavascriptCaffGeekView Answer on Stackoverflow
Solution 5 - JavascriptPIZZZZZZZZZZZA is hereView Answer on Stackoverflow
Solution 6 - JavascriptjldupontView Answer on Stackoverflow
Solution 7 - JavascriptSkullyView Answer on Stackoverflow
Solution 8 - JavascriptMEBView Answer on Stackoverflow