JAVASCRIPT

JavaScript isNaN Function: Syntax, Usage, and Examples

The JavaScript isNaN function is used to determine whether a value is NaN, or “Not-a-Number”. NaN is a special numeric value that represents an undefined or unrepresentable result in arithmetic operations.

Unlike typical numbers, NaN has unique behaviors in comparisons and evaluations, which makes detecting it somewhat tricky. The isNaN function provides a tool to help handle such cases effectively.


Syntax of the JavaScript isNaN Function

The syntax for the isNaN function is straightforward:

isNaN(value)
  • value: The input you want to test. It can be any data type—number, string, boolean, object, etc.

The function returns true if the given value, after being converted to a number, is NaN. Otherwise, it returns false.


Purpose of the isNaN Function in JavaScript

The main goal of the isNaN function is to detect invalid numerical values. In JavaScript, NaN is a numeric type, but it behaves differently than any other number. One of its strangest characteristics is that it is not equal to itself:

NaN === NaN; // false

This means you can’t rely on direct equality checks to identify NaN. The isNaN function was introduced to solve this issue and help developers validate numerical data reliably.


How the isNaN Function Works

When you pass a value to isNaN, JavaScript first attempts to convert that value into a number using type coercion. Then, it checks whether the result is NaN.

Example 1: Basic Usage

isNaN(100);         // false
isNaN("100");      // false
isNaN("hello");     // true
isNaN(NaN);         // true

In this example, the string "100" gets converted to the number 100, so the function returns false. But the string "hello" cannot be converted to a number, so it becomes NaN and the function returns true.


Behavior with Different Data Types

The JavaScript isNaN function can produce unexpected results if you’re unaware of how coercion works. Here’s how it behaves with various types of input:

Strings

isNaN("42");       // false
isNaN("42px");     // true

"42" can be converted into a valid number. "42px" cannot, so it results in NaN.

Booleans

isNaN(true);        // false
isNaN(false);       // false

true becomes 1 and false becomes 0, both of which are valid numbers.

Null and Undefined

isNaN(null);        // false
isNaN(undefined);   // true

null is coerced into 0, but undefined becomes NaN.

Arrays

isNaN([]);          // false
isNaN([1]);         // false
isNaN([1, 2]);      // true

An empty array or an array with a single number element can be converted to a number. Arrays with multiple elements cannot.

Objects

isNaN({});          // true
isNaN({a: 1});      // true

Objects generally fail numeric coercion and become NaN.


Limitations of isNaN

The isNaN function is useful but not perfect. Because it performs type coercion, it may produce true for values that are not literally NaN. This behavior makes the function less precise in certain cases.

Example

isNaN("hello");     // true

Although "hello" is a string, not a number, the function returns true because converting it to a number results in NaN. This behavior can be problematic in programs that need to differentiate between actual NaN values and non-numeric inputs.


Alternative: Number.isNaN

To address the precision issue, JavaScript introduced Number.isNaN in ECMAScript 2015 (ES6). This function only returns true if the input is actually the NaN value.

Example

Number.isNaN(NaN);        // true
Number.isNaN("hello");    // false
Number.isNaN(undefined);  // false

Unlike the global isNaN, this version does not perform coercion.


Real-World Use Cases for isNaN

1. Validating User Input

Forms often collect data as strings. Before performing calculations, you might want to check if the input can be safely converted into a number.

function validateAge(input) {
  const age = parseInt(input);
  if (isNaN(age)) {
    return "Please enter a valid number.";
  }
  return `Your age is ${age}`;
}

2. Data Cleaning in Arrays

If you’re processing mixed-type arrays, the function can help filter out non-numeric values.

const rawData = ["25", "apple", 32, NaN];
const cleaned = rawData.filter(item => !isNaN(item));
console.log(cleaned); // ["25", 32]

3. Checking Computation Results

Some operations may yield NaN if they encounter invalid operands.

function divide(a, b) {
  const result = a / b;
  if (isNaN(result)) {
    return "Invalid division.";
  }
  return result;
}

Performance Considerations

The isNaN function is lightweight and fast, making it suitable for frequent checks in loops, validation scripts, and real-time applications. However, due to its coercion behavior, it may not be ideal for every use case. When performance and precision matter, especially with large datasets, consider using Number.isNaN to avoid unnecessary type conversions.


Best Practices for Using isNaN

  • Use isNaN only when coercion is acceptable or desirable.
  • Prefer Number.isNaN for stricter equality checks.
  • Combine isNaN with type checks using typeof to avoid unexpected results.

function safeCheck(value) {
  return typeof value === "number" && isNaN(value);
}

This ensures you're only evaluating true numbers.


Summary

The JavaScript isNaN function is a valuable tool for detecting NaN values, especially when dealing with dynamic or user-generated data. While its behavior may seem confusing at first due to automatic type coercion, it becomes intuitive with practice. When used carefully, it helps catch data anomalies and prevent logical errors in your programs.

For more precise checks, modern JavaScript environments offer Number.isNaN, which should be your go-to option when type coercion is not desired. Understanding both versions allows you to write safer and more accurate code across various use cases.

If you're building applications that rely on numeric operations, validations, or mathematical calculations, knowing how to use isNaN in JavaScript effectively will make your code more robust and error-resistant.

Learn to Code in JavaScript for Free
Start learning now
button icon
To advance beyond this tutorial and learn JavaScript by doing, try the interactive experience of Mimo. Whether you're starting from scratch or brushing up your coding skills, Mimo helps you take your coding journey above and beyond.

Sign up or download Mimo from the App Store or Google Play to enhance your programming skills and prepare for a career in tech.

You can code, too.

© 2025 Mimo GmbH

Reach your coding goals faster