# JavaScript — Check if a Value is a Number

In some situations, you must ensure that a given value is of a certain type. For example, you may have an options object supporting different properties. Some of them are expected to be numbers. You’re validating the input values and ensuring the given values are numbers and values in your expected range.

This tutorial shows you how to determine whether a given value is a number (or numeric) in JavaScript. This also works with TypeScript, Node.js, and all the other runtimes.

## Determine if a Given Value is a JavaScript Number

A naive approach to check whether a given value is a number is using JavaScript’s `typeof` operator. The `typeof` operator returns a variable’s type as a string. For this tutorial, you can compare the returned type value against the `'number'` type.

Here’s a sample `isNumber` function checking the type of a given input:

``````/**
* Determine whether the given `value` is a number.
*
* @param {*} value
*
* @returns {value is Number}
*/
function isNumber (value) {
return typeof value === 'number'
}
``````

Now you can use the `isNumber` function like this:

``````isNumber(0) // true
isNumber(1) // true
isNumber(NaN) // true
isNumber(1 / 0) // true
isNumber(Number.NEGATIVE_INFINITY) // true
isNumber(Number.POSITIVE_INFINITY) // true

isNumber('1') // false
``````

Notice that the created `isNumber` function returns `true` for ±Infinity and `NaN`, too. Let’s refine that.

### Check for a Finite Number

You may want to restrict the number check to finite numbers, excluding ±Infinity and `NaN`. You can do that using the built-in `Number.isFinite` function. This function determines whether a given input value is a finite number.

``````/**
* Determine whether the given `value` is a finite number. A finite number
* is neither positive Infinity, nor negative Infinity, nor NaN.
*
* @param {*} value
*
* @returns {value is Number}
*/
function isFiniteNumber (value) {
return Number.isFinite(value)
}
``````

Notice: we’re using `Number.isFinite` here because it’s more reliable than the global `isFinite` function. The difference between both: `Number.isFinite` won’t coerce a given input to a number and then compare it against ±Infinity and `NaN`.

Now you can use the `isFiniteNumber` function like this:

``````isFiniteNumber(0) // true
isFiniteNumber(1) // true

isFiniteNumber(NaN) // false
isFiniteNumber('1') // false
isFiniteNumber(1 / 0) // false
isFiniteNumber(Number.NEGATIVE_INFINITY) // false
isFiniteNumber(Number.POSITIVE_INFINITY) // false
``````

## Determine if a Given Value is Numeric in JavaScript

You may want to detect numeric values, too. Our examples above used the string `'1'` as a test value. The functions behave as expected and mark the string value as „not a number“. But in some situations you may want to detect and cast a numeric value to a number.

Here’s a sample function detecting whether a given input is numeric, meaning it’s already a number or can be parsed to a number:

``````/**
* Determine whether the given `value` is numeric.
*
* @param {*} value
*
* @returns {Boolean}
*/
function isNumeric (value) {
const num = parseFloat(value)

return !isNaN(num) && Number.isFinite(num)
}
``````

Now you can use the `isNumeric` function like this:

``````isNumeric(0) // true
isNumeric(1) // true
isNumeric('1') // true

isFiniteNumber(NaN) // false
isFiniteNumber(1 / 0) // false
isFiniteNumber(Number.NEGATIVE_INFINITY) // false
isFiniteNumber(Number.POSITIVE_INFINITY) // false
``````

Enjoy!

# Explore the Library

Find interesting tutorials and solutions for your problems.