Number.isNaN()

isNaN(number)
Returns: boolean · Added in vES6 · Updated March 13, 2026 · Number
number nan isnan

The Number.isNaN() method determines whether the passed value is NaN. Unlike the global isNaN() function, this method does not coerce its argument to a number, making it more reliable for type checking.

Syntax

Number.isNaN(value)

Parameters

ParameterTypeDescription
valueanyThe value to check

Return Value

Returns true if the value is exactly NaN, false otherwise.

Examples

Basic Usage

Number.isNaN(NaN);        // true

Operations That Produce NaN

Number.isNaN(0/0);        // true (division of zero by zero)
Number.isNaN(0 * NaN);    // true (multiplication with NaN)
Number.isNaN(Math.sqrt(-1)); // true (square root of negative)
Number.isNaN(Number('hello')); // true (invalid number parsing)

Values That Are Not NaN

Number.isNaN(42);         // false
Number.isNaN('42');       // false (string, not NaN)
Number.isNaN(undefined);  // false
Number.isNaN(null);       // false
Number.isNaN({});         // false

Comparison: Number.isNaN() vs global isNaN()

The global isNaN() coerces its argument, causing unexpected results:

isNaN('hello');           // true (coerced to NaN)
Number.isNaN('hello');    // false (not the number NaN)

isNaN('42');              // true (coerced to NaN... wait, no: '42' becomes 42!)
Number.isNaN('42');       // false

isNaN(undefined);        // true (coerced to NaN)
Number.isNaN(undefined); // false

Practical Example: Safe Division

function safeDivide(a, b) {
  if (b === 0) {
    return NaN;
  }
  const result = a / b;
  return Number.isNaN(result) ? NaN : result;
}

safeDivide(10, 2);    // 5
safeDivide(10, 0);    // NaN
safeDivide(0, 0);     // NaN

Practical Example: Calculator Results

When building a calculator, you need to handle NaN results gracefully:

function calculate(a, b, operator) {
  let result;
  switch (operator) {
    case '+': result = a + b; break;
    case '-': result = a - b; break;
    case '*': result = a * b; break;
    case '/': result = b !== 0 ? a / b : NaN; break;
    default: result = NaN;
  }
  
  if (Number.isNaN(result)) {
    return 'Invalid operation';
  }
  return result;
}

calculate(10, 5, '+');   // 15
calculate(10, 0, '/');   // "Invalid operation"
calculate(10, 5, '^');   // "Invalid operation"

See Also