Number.isFinite()

Number.isFinite(value)
Returns: Boolean · Updated March 13, 2026 · Number
javascript number finite type-check

The Number.isFinite() method determines whether the passed value is a finite number. In JavaScript, finite numbers are all values that are not Infinity, -Infinity, or NaN. This method is part of the ES6 specification and provides a more reliable way to check for finite numbers compared to the global isFinite() function.

Syntax

Number.isFinite(value)

Parameters

ParameterTypeDescription
valueanyThe value to check for finiteness

Return Value

Returns true if the value is a finite number (a regular number that is not Infinity, -Infinity, or NaN). Returns false for all non-finite numbers and non-number types.

Examples

Basic Usage

Number.isFinite(42);           // true
Number.isFinite(3.14159);     // true
Number.isFinite(-10);         // true
Number.isFinite(0);            // true

Non-Finite Numbers

Number.isFinite(Infinity);     // false
Number.isFinite(-Infinity);    // false
Number.isFinite(NaN);          // false

Edge Cases: Non-Number Types

One of the key differences between Number.isFinite() and the global isFinite() is how it handles non-number types:

// These all return false - they are not finite numbers
Number.isFinite('42');         // false (string)
Number.isFinite('hello');      // false (string)
Number.isFinite(undefined);    // false
Number.isFinite(null);         // false
Number.isFinite(true);         // false (boolean)
Number.isFinite({});           // false (object)
Number.isFinite([]);           // false (array)

Common Patterns

Input Validation

When validating user input that should be a finite number:

function processValue(input) {
  if (!Number.isFinite(input)) {
    return 'Invalid: not a finite number';
  }
  return input * 2;
}

processValue(10);       // 20
processValue(Infinity); // 'Invalid: not a finite number'
processValue('hello'); // 'Invalid: not a finite number'

Preventing Division by Zero Issues

function calculateRate(total, count) {
  if (!Number.isFinite(total) || !Number.isFinite(count)) {
    return NaN;
  }
  if (count === 0) {
    return Infinity;
  }
  return total / count;
}

calculateRate(100, 0);  // Infinity
calculateRate(100, 4); // 25
calculateRate(NaN, 4); // NaN

Difference from Global isFinite()

The global isFinite() coerces its argument to a number before checking:

// Global isFinite() coerces values
isFinite('42');         // true (coerced to 42)
isFinite('hello');      // false (coerced to NaN)
Number.isFinite('42');  // false (no coercion, string is not a number)

// The key difference is with null and empty strings
isFinite(null);         // true (null becomes 0)
Number.isFinite(null);  // false

isFinite('');           // true (empty string becomes 0)
Number.isFinite('');    // false

Data Processing Pipeline

const values = [10, 20, Infinity, 30, NaN, 40, -Infinity, 50];

const finiteValues = values.filter(Number.isFinite);
// [10, 20, 30, 40, 50]

const sum = finiteValues.reduce((a, b) => a + b, 0);
// 150

See Also