Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

What is double question mark in JavaScript

Understanding the Double Question Mark in JavaScript

JavaScript, a programming language that powers the web, is full of nuances and tools that can make coding easier. One such tool is the double question mark (??), also known as the Nullish Coalescing Operator. But don't let the fancy name intimidate you. Think of it like a handy little helper that assists you in dealing with variables that might not have a value.

What Does it Do?

In the simplest terms, the double question mark (??) checks whether the value on its left is null or undefined. If it is, it returns the value on its right. If it's not, it returns the value on the left.

Imagine you're baking a cake and the recipe calls for eggs. You check your fridge and find that you're out of eggs. Thankfully, you have an egg substitute in your pantry. In this scenario, the eggs are the value on the left and the egg substitute is the value on the right. The double question mark (??) is you checking for eggs and deciding what to use.

let eggs = null;
let substitute = 'applesauce';

let ingredient = eggs ?? substitute;
console.log(ingredient); // "applesauce"

In the code above, because eggs is null, the ?? operator returns the value of substitute, which is 'applesauce'.

How Does it Compare to Other Operators?

You might be thinking, "Don't we already have the || (OR) operator for this?" Well, yes and no. The || operator checks for any "falsy" value, not just null or undefined. In JavaScript, a "falsy" value is a value that is considered false when encountered in a Boolean context.

Consider these "falsy" values:

false, 0, -0, 0n, "", null, undefined, NaN

If the value on the left of || is any of these, it will return the value on the right.

let eggs = 0;
let substitute = 'applesauce';

let ingredient = eggs || substitute;
console.log(ingredient); // "applesauce"

In the code above, even though we have 0 eggs (which is a valid value), it's considered "falsy" and so applesauce is returned. This might not be what we want, hence the need for ??.

Practical Use Cases

The ?? operator can be particularly useful in situations where you want to provide default values for variables. For example, consider this function that greets a user:

function greet(name) {
  let greeting = name ?? 'Guest';
  console.log(`Hello, ${greeting}!`);

greet(null); // "Hello, Guest!"
greet('Alice'); // "Hello, Alice!"

In the code above, if the name parameter is null or undefined, the function will greet a 'Guest'. Otherwise, it will greet the provided name.

The Cautionary Tale

Like with all tools, it's important to use ?? appropriately. It only checks for null or undefined. Other "falsy" values, like false, 0, or an empty string (""), are considered valid by ??.

let truthyOrFalsy = false ?? 'Truthy';
console.log(truthyOrFalsy); // false

truthyOrFalsy = 0 ?? 'Truthy';
console.log(truthyOrFalsy); // 0

truthyOrFalsy = "" ?? 'Truthy';
console.log(truthyOrFalsy); // ""

In the code above, even though false, 0, and "" are "falsy" values, they are not null or undefined. Therefore, ?? considers them as valid values and returns them.

Conclusion: Embracing the Double Question Mark

The JavaScript double question mark (??) is like the quiet, thoughtful friend who doesn't speak much but, when they do, it's always helpful. It's there to assist you in dealing with those pesky null or undefined values that can cause bugs or unexpected behavior in your code.

Remember, it's not about replacing the || operator, but about knowing when to use the right tool for the job. Think of it as having an extra ingredient in your coding recipe - you might not use it in every dish, but for the ones you do, it adds just the right flavor.

So, next time you find yourself dealing with potential null or undefined values in JavaScript, give a thought to our friend, the double question mark (??). It might just be the helper you need to make your code cleaner, more readable, and bug-free. And who knows? It might even save your cake one day.