How to Check if a Value is a Number in JavaScript
In JavaScript, there are several methods to check if a value is a number. Here’s a summary of the most common techniques:
1. Using typeof
The typeof
operator returns a string indicating the type of the operand. For checking if a value is a number:
function isNumber(value) {
return typeof value === "number";
}
// Examples
console.log(isNumber(42)); // true
console.log(isNumber("42")); // false
console.log(isNumber(NaN)); // true
console.log(isNumber(Infinity)); // true
2. Using Number.isFinite()
This method checks if a value is a finite number (i.e., not NaN
, Infinity
, or -Infinity
).
function isFiniteNumber(value) {
return Number.isFinite(value);
}
// Examples
console.log(isFiniteNumber(42)); // true
console.log(isFiniteNumber(NaN)); // false
console.log(isFiniteNumber(Infinity)); // false
console.log(isFiniteNumber("42")); // false
3. Using Number.isNaN()
To specifically check if a value is NaN
, you can use this method:
function isNaNValue(value) {
return Number.isNaN(value);
}
// Examples
console.log(isNaNValue(NaN)); // true
console.log(isNaNValue(42)); // false
console.log(isNaNValue("42")); // false
4. Using !isNaN()
with parseFloat()
The isNaN()
function determines whether a value is NaN or not. However, it can be tricky because isNaN()
will coerce the value to a number first, so using parseFloat()
or parseInt()
helps ensure the value is actually a number.
function isNumber(value) {
return !isNaN(parseFloat(value)) && isFinite(value);
}
// Examples
console.log(isNumber(42)); // true
console.log(isNumber("42")); // true
console.log(isNumber("42abc")); // false
console.log(isNumber(NaN)); // false
5. Using Regular Expressions
For stricter validation, you can use regular expressions to check if the value represents a valid number:
function isNumber(value) {
return /^-?\d+(\.\d+)?$/.test(value);
}
// Examples
console.log(isNumber(42)); // false (since 42 is a number, not a string)
console.log(isNumber("42")); // true
console.log(isNumber("42.42")); // true
console.log(isNumber("42abc")); // false
Conclusion
- Use
typeof value === 'number'
to check if a value is a number but be aware that this will includeNaN
andInfinity
. - Use
Number.isFinite(value)
for checking if a value is a finite number. - Use
Number.isNaN(value)
specifically to check forNaN
. - Use
!isNaN(parseFloat(value)) && isFinite(value)
for more robust checks, especially when dealing with values that could be strings. - Use regular expressions for strict validation, mainly when dealing with strings.
Choose the method that best fits your needs based on what types of values you expect to handle.