Home >Web Front-end >JS Tutorial >Don't Confuse ?? with || in JavaScript: Here's How They Differ!
JavaScript provides several ways to handle undefined or null values in code. Two common operators used for this purpose are the nullish coalescing operator (??) and the logical OR operator (||). While these operators may seem similar at first glance, their behavior can differ significantly in certain situations. Understanding the differences between these two operators is essential, especially for beginners who want to write more precise and bug-free code.
In this guide, we’ll explore the difference between ?? and || in JavaScript, breaking it down step by step with examples so you can go from zero to hero in no time.
The nullish coalescing operator ?? is used to provide a fallback value when dealing with null or undefined. It only checks whether a value is null or undefined—and if it is, it returns the fallback value provided.
Syntax:
let result = value ?? fallbackValue;
In this expression, if value is either null or undefined, the fallbackValue will be returned.
let name = null; let defaultName = name ?? 'John Doe'; console.log(defaultName); // Output: 'John Doe'
In this example, name is null, so defaultName is assigned 'John Doe' as a fallback.
The logical OR operator || is another operator used for fallback values, but it works differently. It checks if the left-hand side of the expression is a falsy value. In JavaScript, falsy values include null, undefined, false, 0, NaN, and '' (empty string).
Syntax:
let result = value || fallbackValue;
If value is falsy, fallbackValue will be returned.
let age = 0; let defaultAge = age || 18; console.log(defaultAge); // Output: 18
In this case, age is 0, which is a falsy value, so defaultAge is assigned 18.
At first glance, ?? and || might seem to serve the same purpose—providing fallback values—but there’s an important distinction:
This subtle difference becomes crucial when you are dealing with falsy but valid values like 0, '', or false.
let result = value ?? fallbackValue;
Here, count is 0, which is a valid value but falsy in JavaScript.
The choice between ?? and || depends on the specific behavior you want.
Example:
let name = null; let defaultName = name ?? 'John Doe'; console.log(defaultName); // Output: 'John Doe'
In this example, an empty string '' is a valid user input, so ?? allows it to pass through without replacing it with the fallback.
Example:
let result = value || fallbackValue;
Here, false is treated as falsy, and the fallback 'Not logged in' is used.
Now that you know the difference, let’s look at a couple of common mistakes beginners often make and how to avoid them.
let age = 0; let defaultAge = age || 18; console.log(defaultAge); // Output: 18
Problem: You wanted to display 0 as the score, but || replaced it with 'No score' because 0 is falsy.
Solution: Use ?? to allow 0 to pass through.
let count = 0; let defaultCount1 = count ?? 10; // Using nullish coalescing let defaultCount2 = count || 10; // Using logical OR console.log(defaultCount1); // Output: 0 console.log(defaultCount2); // Output: 10
let userInput = ''; let fallbackInput = userInput ?? 'default input'; console.log(fallbackInput); // Output: ''
Explanation: userPreference is null, so the fallback false is used. This is correct behavior for ??.
Yes, you can use both operators in different parts of the same expression if needed.
Example:
let isLoggedIn = false; let loginStatus = isLoggedIn || 'Not logged in'; console.log(loginStatus); // Output: 'Not logged in'
This first checks for null or undefined using ?? and then checks for other falsy values using ||.
The ?? operator is supported in modern browsers, but for older environments, you may need to use a transpiler like Babel.
No, ?? only checks for null and undefined, not for other falsy values like false, 0, or ''.
Understanding the difference between ?? and || in JavaScript is crucial for writing robust and error-free code. While both operators help in providing fallback values, their behavior differs when it comes to handling falsy values. Use ?? when you need to check for null or undefined, and use || when you want to check for any falsy value.
By mastering these operators, you'll be able to write more flexible and accurate code that behaves exactly as intended.
The above is the detailed content of Don't Confuse ?? with || in JavaScript: Here's How They Differ!. For more information, please follow other related articles on the PHP Chinese website!