DEV Community

Cover image for Nullish Coalescing (??) - Handle Defaults the Right Way
Chhavi Kohli
Chhavi Kohli

Posted on

Nullish Coalescing (??) - Handle Defaults the Right Way

Before ES2020, we(developers) mostly relied on the logical OR (||) operator for default values.

Let's say we want to set pageFromApi

const currentPage = pageFromApi || 1;

Issue

The || operator treats all falsy values as invalid:

  • 0
  • '' (empty string)
  • false
  • null
  • undefined

EXAMPLE

// User is on page 0 (first page)
const pageFromApi = 0;

WRONG: page 0 gets replaced
const page = pageFromApi || 1;

console.log(page); // Output:1

Enter fullscreen mode Exit fullscreen mode

Page 0 is valid, but || thinks it's falsy.

Nullish Coalescing (??)

The Nullish Coalescing Operator was introduced in ES2020 to solve this exact problem.

Coalescing Definition

SYNTAX

const result = value ?? defaultValue;
Enter fullscreen mode Exit fullscreen mode

EXAMPLE

// User is on page 0 (first page)
const pageFromApi = 0;

// CORRECT
const page = pageFromApi ?? 1;

console.log(page); // 0
Enter fullscreen mode Exit fullscreen mode

Other Use Cases-

Coalescing examples

It also helps in code optimization.

// OR Logic
function getUsername(user) {
  if (user.name === null || user.name === undefined) {
    return "Guest";
  } else {
    return user.name;
  }
}

// OUTPUT examples:
getUsername({ name: "Chhavi" });   // "Chhavi"
getUsername({ name: "" });         // ""
getUsername({ name: null });       // "Guest"
getUsername({});                   // "Guest"

Enter fullscreen mode Exit fullscreen mode
// Nullish Coalescing
function getUsername(user) {
  return user.name ?? "Guest";
}

// OUTPUT examples:
getUsername({ name: "Chhavi" });   // "Chhavi"
getUsername({ name: "" });         // ""
getUsername({ name: null });       // "Guest"
getUsername({});                   // "Guest"

Enter fullscreen mode Exit fullscreen mode

Conclusion: same output but fewer lines of code.

When Should You Use ???

Nullish Coalescing(??):

  • 0, false, or '' are valid values.
  • Handling API responses or optional configs.

Logical OR:

-Any falsy value should trigger a default.
-You intentionally want aggressive fallback behavior.

----------------------------************-----------------------------

Top comments (0)