0
0
JavascriptHow-ToBeginner · 3 min read

How to Check if Value is Number in JavaScript

To check if a value is a number in JavaScript, use typeof value === 'number' combined with Number.isFinite(value) to ensure it is a finite number. Avoid using isNaN() alone because it can give misleading results for non-numeric types.
📐

Syntax

Here are common ways to check if a value is a number:

  • typeof value === 'number': Checks if the type is number.
  • Number.isFinite(value): Checks if the value is a finite number (not NaN or Infinity).
  • !isNaN(value): Checks if value is not NaN, but can be misleading.
javascript
typeof value === 'number'
Number.isFinite(value)
!isNaN(value)
💻

Example

This example shows how to check different values to see if they are numbers using typeof and Number.isFinite.

javascript
const values = [42, '42', NaN, Infinity, null, undefined, 3.14];

values.forEach(value => {
  const isNumberType = typeof value === 'number';
  const isFiniteNumber = Number.isFinite(value);
  console.log(`Value: ${value}, typeof number: ${isNumberType}, is finite number: ${isFiniteNumber}`);
});
Output
Value: 42, typeof number: true, is finite number: true Value: 42, typeof number: false, is finite number: false Value: NaN, typeof number: true, is finite number: false Value: Infinity, typeof number: true, is finite number: false Value: null, typeof number: false, is finite number: false Value: undefined, typeof number: false, is finite number: false Value: 3.14, typeof number: true, is finite number: true
⚠️

Common Pitfalls

Using isNaN() alone can cause confusion because it converts the value to a number first, so strings like '42' return false (meaning "not NaN"), which might seem like a number. Also, typeof NaN is 'number', but NaN is not a valid number.

Always combine typeof with Number.isFinite() to reliably check for real numbers.

javascript
const value = '42';
console.log(isNaN(value)); // false, but '42' is a string

const value2 = NaN;
console.log(typeof value2 === 'number'); // true, but NaN is not a valid number

// Correct way:
const isRealNumber = typeof value === 'number' && Number.isFinite(value);
console.log(isRealNumber); // false for '42'

const isRealNumber2 = typeof value2 === 'number' && Number.isFinite(value2);
console.log(isRealNumber2); // false for NaN
Output
false true false false
📊

Quick Reference

Use this quick guide to check if a value is a number:

MethodDescriptionReturns true for
typeof value === 'number'Checks if value type is number42, 3.14, NaN, Infinity
Number.isFinite(value)Checks if value is a finite number42, 3.14
!isNaN(value)Checks if value is not NaN (converts first)'42', 42, 3.14 (can be misleading)

Key Takeaways

Use typeof combined with Number.isFinite to check for real numbers.
Avoid using isNaN alone because it converts values and can mislead.
NaN and Infinity are of type 'number' but are not valid finite numbers.
Strings that look like numbers are not of type 'number'.
Number.isFinite returns true only for finite numbers, excluding NaN and Infinity.