Mastering the Power of Nullish Coalescing in JavaScript

Mastering the Power of Nullish Coalescing in JavaScript
Photo by Ben Wicks / Unsplash

In JavaScript, handling values that may be null or undefined can be a tricky part of coding, especially for beginners. You might have run into situations where you need a fallback value when something is missing or not provided. This is where nullish coalescing (??) comes into play—a feature introduced in ECMAScript 2020 that helps deal with null and undefined without misinterpreting other "falsy" values like 0, false, or "" (empty string).

Why Nullish Coalescing Matters

JavaScript has several falsy values: 0, false, "" (empty string), NaN, null, and undefined. When you want to check for a missing or non-existent value, you often reach for logical OR (||). While || is great for setting fallback values, it treats any falsy value as false. This can lead to unexpected behavior.

Let’s look at an example:

const userCount = 0;
const count = userCount || 10;
console.log(count); // Outputs: 10

Even though userCount is 0, which is a valid value, the logical OR (||) operator considers it falsy and replaces it with 10. This can be an issue if you want to preserve falsy values like 0, false, or "", while still providing a fallback only for null or undefined.

Enter the Nullish Coalescing Operator (??)

The nullish coalescing operator (??) fixes this problem. Unlike ||, it only checks for null or undefined. Other falsy values like 0, false, and "" are left untouched.

Here’s how the previous example works with ??:

const userCount = 0;
const count = userCount ?? 10;
console.log(count); // Outputs: 0

Now, 0 is correctly preserved because it’s not null or undefined.

Understanding How It Works

The nullish coalescing operator has a simple rule: it checks whether the left-hand side is null or undefined. If it is, it returns the value on the right-hand side. If the left-hand side has any other value, including falsy values like 0, false, or "", it leaves the left-hand side as is.

const name = null;
const displayName = name ?? "Guest";
console.log(displayName); // Outputs: "Guest"

const status = false;
const displayStatus = status ?? "Online";
console.log(displayStatus); // Outputs: false

In the first example, name is null, so the fallback value "Guest" is used. In the second example, status is false, but since it's neither null nor undefined, the ?? operator doesn’t replace it with "Online".

Common Use Cases

Here are some scenarios where nullish coalescing can save you from common pitfalls:

  • Handling user input: If you're working with forms or API responses where null or undefined are possible, ?? can provide a default value without accidentally overriding falsy data.
const userInput = "";
const validatedInput = userInput ?? "Default value";
console.log(validatedInput); // Outputs: ""
  • Function parameters: When setting default values for optional parameters, ?? ensures you don’t mistakenly replace values like 0 or false.
function calculateTotal(price, discount = 0) {
  return price - (discount ?? 0);
}

console.log(calculateTotal(100, 0)); // Outputs: 100
  • Dealing with API responses: If an API might return null or undefined for certain fields, you can use ?? to set a default response without interfering with falsy values.

Finally

The nullish coalescing operator is a small but powerful tool that makes handling null or undefined values in JavaScript easier. By understanding the difference between ?? and ||, you can write more reliable code that preserves valid falsy values like 0 or false, while still providing defaults when necessary. It's a great feature to add to your JavaScript toolkit, especially when dealing with unpredictable or optional data.

Support Us