In JavaScript, falsy values are those that are evaluated as false when used in a Boolean. Unlike truthy values, falsy values represent "nothingness," "emptiness," or "failure."
If you're writing conditional statements or logical operations, understanding falsy values is very important because these are the only values JavaScript treats as false. Here’s the rule: If a value is not one of JavaScript’s falsy values, it is truthy.
List of Falsy Values in JavaScript
JavaScript has a fixed set of falsy values
false
The Boolean value false is, naturally, falsy.
if (false) console.log("This will not run.");
Output
0 (Zero)
The number 0 is falsy, regardless of whether it’s positive or negative zero.
if (0) console.log("This will not run.");
if (-0) console.log("This will also not run.");
Output
0n (BigInt Zero)
The BigInt value 0n is falsy.
if (0n) console.log("This will not run.");
Output
"" (Empty String)
Strings without any characters (empty strings) are falsy, but strings with whitespace or content are truthy.
if ("") console.log("This will not run.");
Output
null
null represents the intentional absence of any object value and is falsy.
if (null) console.log("This will not run.");
Output
undefined
undefined represents a variable that has been declared but not assigned a value. It is falsy.
let value;
if (value) console.log("This will not run.");
Output
NaN (Not-a-Number)
NaN is the result of invalid or undefined mathematical operations and is falsy.
if (NaN) console.log("This will not run.");
Output
document.all
This is a quirky value used for backward compatibility in web browsers. Although technically an object, it is treated as falsy.
if (document.all) console.log("This will not run.");
Now let’s see how JavaScript handles these falsy values in action
const fValues = [false, 0, -0, 0n, "", null, undefined, NaN];
fValues.forEach(value => {
if (value) {
console.log(`${value} is truthy.`);
} else {
console.log(`${value} is falsy.`);
}
});
Output
false is falsy. 0 is falsy. 0 is falsy. 0 is falsy. is falsy. null is falsy. undefined is falsy. NaN is falsy.
Why Falsy Values Matter?
Understanding falsy values can help avoid common pitfalls in JavaScript
Default Values with || (Logical OR):
You can use || to provide a default value if the left operand is falsy.
let username = "";
let displayName = username || "Guest";
console.log(displayName);
Output
Guest
Short-Circuit Evaluation
Falsy values cause logical operations to short-circuit.
let result = 0 && "This won't be evaluated";
console.log(result);
Output
0
Conditional Statements:
Falsy values are often used in if conditions to check for the existence or validity of a value.
let config = null;
if (!config) {
console.log("Configuration is missing.");
}
Output
Configuration is missing.
Common Pitfalls with Falsy Values
Empty Strings vs. Strings with Whitespace
if ("") console.log("Falsy"); // Will not run
if (" ") console.log("Truthy"); // Will run
Output
Truthy
Zero vs. Non-Zero Numbers
if (0) console.log("Falsy"); // Will not run
if (-1) console.log("Truthy"); // Will run
Output
Truthy
null vs. undefined
Although both are falsy, they are used differently. null often represents a absence of a value, while undefined usually indicates it is not yet initialize.
Explicit Boolean Conversion
If you want to explicitly determine whether a value is falsy, you can use the Boolean function or the double negation operator !!.
console.log(Boolean(0));
console.log(Boolean(""));
console.log(Boolean([]));
console.log(!!null);
console.log(!!"hello");
Output
false false true false true