Convert Null Undefined NaN to Zero in JavaScript


Welcome to the JavaScript circus 🎪 where NULL, Undefined, and NaN do their high-wire act, and we teach them to land safely on 0! In this fun-filled guide, we juggle through JavaScript basics, toss around various conversion techniques, and throw in some common pitfalls (with safety nets, of course). Perfect for coding clowns and serious developers alike, this is your ticket to the show where JavaScript’s quirks become your tricks! 🎪💻🤹

Lets dive in! 👨‍💻


Refresher: JavaScript data types, Falsy values, Operators, == vs ===

Before we start converting Null/Undefined/NaN to Zero in JavaScript, lets refresh few concepts.

Data Types: JavaScript categorizes values into types, which define their characteristics and behaviors. The basic types include:

  • Strings: Represent textual data. Example: "Hello, world!".
  • Numbers: Include both integers and floating-point numbers. Example: 42, 3.14.
  • Booleans: True or false values. Example: true, false.
  • Undefined: A variable declared but not assigned a value.
  • Null: Represents the intentional absence of any object value.
  • Objects: Collections of properties. Example: {name: "Alice", age: 30}.
  • Arrays: List-like objects. Example: [1, 2, 3].
Data Types (JavaScript)
console.log(typeof "Hello, world!"); // Outputs: string
console.log(typeof 42); // Outputs: number
console.log(typeof true); // Outputs: boolean

Understanding Falsy Values: Falsy values are values that are considered false when encountered in a Boolean context. These include:

  • false
  • 0 (zero)
  • "" (empty string)
  • null
  • undefined
  • NaN (Not a Number)
Falsy Values (JavaScript)
if (false || 0 || "" || null || undefined || NaN) {
  console.log("This will not print.");
} else {
  console.log("Falsy value encountered."); // Outputs: Falsy value encountered.
}

Basic JavaScript Operators: JavaScript operators are symbols used to perform operations on variables and values. Basic operators include:

  • Arithmetic operators (e.g., +, -, *, /)
  • Comparison operators (e.g., ==, ===, !=, !==)
  • Logical operators (e.g., &&, ||, !)
  • Assignment operators (e.g., =, +=, -=)
Basic Operator Types (JavaScript)
let a = 10;
let b = 5;
console.log(a + b); // Outputs: 15 (Addition)
console.log(a === b); // Outputs: false (Strict equality)
console.log(a && b); // Outputs: 5 (Logical AND)

Difference between == and ===: The == operator checks for equality after performing type coercion (if types are different). The === operator, known as strict equality, checks for equality without type coercion.

== vs === (JavaScript)
console.log(1 == "1"); // Outputs: true (type coercion)
console.log(1 === "1"); // Outputs: false (no type coercion)

Ways to Convert NULL or Undefined to 0 in JavaScript

Lets see various techniques to convert JavaScript Null or Undefined to Zero. We’ll see from the most straightforward to the most concise implementations.

Using if Statement to convert Null or Undefined to Zero in JavaScript

  • Deep Equality (‘===’ vs ‘==’): In JavaScript, ‘===’ is the strict equality operator, which checks for equality without type conversion. This means ‘===’ compares both the value and the type of the operands. In contrast, ‘==’ is the loose equality operator and performs type coercion if needed. Using ‘===’ avoids unexpected results due to type coercion.
  • Code Explanation: The code checks if val is strictly equal to null or undefined. If true, val is set to 0. This is a clear, explicit way to handle conversion, especially beneficial for beginners to understand how conditional checks work in JavaScript.
Using if and === (JavaScript)
let val = undefined;

if (val === null || val === undefined) {
  val = 0;
}

console.log(val); // Outputs: 0

Using Ternary Operator to convert Null or Undefined to Zero in JavaScript

  • Ternary Operator Structure: The ternary operator is a concise way to write an if-else statement. It consists of a condition followed by a question mark (?), then the expression to execute if the condition is truthy, followed by a colon (:), and finally the expression to execute if the condition is falsy.
  • Code Explanation: The condition checks if val is null or undefined. If so, val is set to 0; otherwise, it retains its original value. This one-liner is an efficient way to handle conditional assignments.
Using ternary (JavaScript)
let val = null;
val = val === null || val === undefined ? 0 : val;
console.log(val); // Outputs: 0

Using Logical OR (||) Operator to convert Null or Undefined to Zero in JavaScript

  • Falsy Values: In JavaScript, null, undefined, 0, "" (empty string), NaN, and false are considered falsy values. The logical OR (||) operator returns the first operand if it’s truthy, or the second operand if the first is falsy.
  • Code Explanation: Here, if val is null or undefined (both falsy), the operator returns 0. This approach is less explicit than the if statement but is a common pattern in JavaScript for setting default values.
  • Caution: Will also convert other Falsy values, like "" (empty string), 0, NaN and false, also to zero.
Using Logical Or (JavaScript)
let val = null;
val = val || 0;
console.log(val); // Outputs: 0

Using Nullish Coalescing Operator (??) to convert Null or Undefined to Zero in JavaScript

  • Nullish Values: The nullish coalescing operator is a logical operator that returns its right-hand side operand when its left-hand side operand is null or undefined, and otherwise returns its left-hand side operand.
  • Code Explanation: This operator is specifically designed to handle cases where you want to fall back to a default value in the case of null or undefined. It’s more precise than the logical OR, as it doesn’t treat other falsy values (like 0 or ”) as nullish.
Nullish Coalescing Operator (??) (JavaScript)
let val = undefined;
val = val ?? 0;
console.log(val); // Outputs: 0

Using Logical Nullish Assignment (??=) to convert Null or Undefined to Zero in JavaScript

  • Assignment Shortcut: The logical nullish assignment operator combines the features of assignment (=) and the nullish coalescing operator (??). It assigns the right-hand operand to the variable only if the variable is null or undefined.
  • Code Explanation: This operator offers a concise way to assign default values to variables that are currently null or undefined. It’s a newer addition to JavaScript and enhances code readability and brevity.
Nullish Assignment (??=) (JavaScript)
let val = null;
val ??= 0;
console.log(val); // Outputs: 0

Ways to Convert NaN to 0 in JavaScript

JavaScript treats NaN uniquely. Like, NaN is the only value in JavaScript that is not equal to itself. So direct comparison with equality sign is not gonna work for sure.

So, lets learn various reliable ways, to identify and convert NaN to a more manageable form (like 0).

Using Number.isNaN() and a Conditional Statement or Ternary Operator

Number.isNaN() is a method to check if a value is NaN (Not a Number). This is important because NaN is a unique type in JavaScript; it is the only value that is not equal to itself (i.e., NaN === NaN is false).

Using Number.isNaN() in a conditional statement or ternary operator is a clear and reliable way to check for NaN.

Number.isNan(), if, ternary (JavaScript)
let val = NaN;

// Using 'if' conditional:
if (Number.isNaN(val)) {
  val = 0;
}
console.log(val); // Outputs: 0

// Or using ternary operator
val = Number.isNaN(val) ? 0 : val;
console.log(val); // Outputs: 0

Using Logical OR (||) Operator to Convert NaN to 0 in JavaScript

The logical OR operator returns the first truthy value it encounters or the last value if all are falsy. Since NaN is a falsy value, this operator can be used for conversion.

OR to convert NaN (JavaScript)
let val = NaN;
val = val || 0;
console.log(val); // Outputs: 0

Using the Number Function to Convert NaN to 0 in JavaScript

The Number function in JavaScript can convert various data types to a number. When passed null, undefined, or NaN, it returns 0.

Caution: This method also converts other falsy values (like an empty string) to 0, so its use should be context-dependent.

Number Function (JavaScript)
let val = NaN;
val = Number(val);
console.log(val); // Outputs: 0

Using a custom function to convert NaN to 0 in JavaScript

Creating a custom function allows for more control and specificity in the conversion process. You can define a function that checks for NaN using Number.isNaN() and returns 0, or returns the value itself if it’s not NaN, or do whatever you like.

Custom Function (JavaScript)
function convertToZeroIfNaN(value) {
  return Number.isNaN(value) ? 0 : value;
}
let val = NaN;
val = convertToZeroIfNaN(val);
console.log(val); // Outputs: 0

Using Array.reduce() on Arrays with NaNs in JavaScript

When dealing with arrays, the reduce method can be used to apply a conversion for each element. This is specially useful for aggregating values, such as summing an array while converting NaN to 0.

Array.reduce() on Arrays (JavaScript)
let array = [1, NaN, 3];
let sum = array.reduce(
  (acc, val) => acc + (Number.isNaN(val) ? 0 : val),
  0,
);
console.log(sum); // Outputs: 4 (1 + 0 + 3)

Tips & Mistakes in Sorting JavaScript Maps

Use Strict Equality (===)

=== checks both value and type, preventing unintended type conversions. This is crucial in JavaScript, where type coercion can lead to unexpected results.

Use === (JavaScript)
console.log(0 == "0"); // true, due to type coercion
console.log(0 === "0"); // false, no type coercion

Check for NaN Properly:

Since NaN is the only value in JavaScript that is not equal to itself, use Number.isNaN() for accurate detection.

Check NaN (JavaScript)
let val = 0 / 0; // NaN
console.log(val === NaN); // false, incorrect way to check
console.log(Number.isNaN(val)); // true, correct way to check

Mind the Falsy values with Logical OR (||)

It returns the first truthy operand or the last operand if all are falsy. This can be misleading when dealing with values like 0, "", or false, which are falsy but might be valid in your context.

Falsy with OR (JavaScript)
let count = 0;
console.log(count || 10); // 10, might not be intended

Prefer Nullish Coalescing Over Logical OR

?? only checks for null or undefined, making it more precise than || for default value assignments.

Nullish Coalescing Over Logical OR (JavaScript)
let name = "";
console.log(name || "Unknown"); // "Unknown", might not be intended
console.log(name ?? "Unknown"); // "", more accurate

Avoid Implicit Type Conversions

Be aware of JavaScript’s automatic type conversion (or coercion) in arithmetic and comparisons (even when involving Null, Undefined, or NaN). Like:

  • With null: In arithmetic operations, null is converted to 0. However, this implicit conversion might lead to bugs if not intended. For instance, null + 5 results in 5, which may or may not be the desired outcome.
  • With undefined: Any arithmetic operation with undefined results in NaN. This is because undefined is not implicitly converted to a number, unlike null. For example, undefined + 5 results in NaN.
  • With NaN: Once a value becomes NaN, it remains NaN through most operations and can propagate through your calculations. For example, NaN + 5 also results in NaN.
Implicit Type Conversions (JavaScript)
// Implicit conversion with null
console.log(null + 5); // Outputs: 5 (null is converted to 0)
console.log(null * 3); // Outputs: 0 (null is converted to 0)

// Implicit conversion with undefined
console.log(undefined + 5); // Outputs: NaN (undefined not converted to a number)
console.log(undefined * 3); // Outputs: NaN (undefined not converted to a number)

// Operations involving NaN
console.log(NaN + 5); // Outputs: NaN (NaN propagates through arithmetic operations)
console.log(NaN * 2); // Outputs: NaN (NaN propagates through arithmetic operations)

// Using 'null' and 'undefined' in string concatenation
console.log("Value is " + null); // Outputs: "Value is null" (null is converted to "null")
console.log("Value is " + undefined); // Outputs: "Value is undefined" (undefined is converted to "undefined")

// Conversion using Logical OR (||) Operator
console.log(null || 0); // Outputs: 0 (null is falsy, so 0 is returned)
console.log(undefined || 0); // Outputs: 0 (undefined is falsy, so 0 is returned)
console.log(NaN || 0); // Outputs: 0 (NaN is falsy, so 0 is returned)

🧪Practice Coding Problem: The Magic Number Replacer

In the spirit of Test Driven Learning ( 😁), lets test our understanding by solving a problem.

You’re tasked with creating a function for a playful wizard who loves the number 3. This function should take an array of numbers and replace any occurrence of null, undefined, or NaN with the number 3.

Problem (JavaScript)
function magicNumberReplacer(numbersArray) {
  // > > > 👉 Write code here 👈 < < <
}

console.log(magicNumberReplacer([1, null, 2, NaN, 3])); 
// Outputs: [1, 3, 2, 3, 3]

console.log(magicNumberReplacer([undefined, 4, NaN])); 
// Outputs: [3, 4, 3]

console.log(magicNumberReplacer([5, 6])); 
// Outputs: [5, 6]
Please attempt before seeing the Answer:
Solution (JavaScript)
function magicNumberReplacer(numbersArray) {
  return numbersArray.map((val) =>
    val === null || val === undefined || Number.isNaN(val)
      ? 3
      : val,
  );
}

Explanation: The function magicNumberReplacer takes an array of numbers and uses the map method to transform it. It checks each element: if the element is null, undefined, or NaN, it replaces it with the number 3. Otherwise, it keeps the original number.


Now you are an expert in handling NaN, Null or Undefined in JavaScript.

Keep learning, keep experimenting and keep coding! 🚀👨‍💻

Scroll to Top