JAVASCRIPT
JavaScript isNaN Function: Syntax, Usage, and Examples
The JavaScript isNaN function is used to determine whether a value is NaN, or “Not-a-Number”. NaN is a special numeric value that represents an undefined or unrepresentable result in arithmetic operations.
Unlike typical numbers, NaN has unique behaviors in comparisons and evaluations, which makes detecting it somewhat tricky. The isNaN function provides a tool to help handle such cases effectively.
Learn JavaScript on Mimo
If you keep examples for later, saving them in Github can make them easy to revisit.
Syntax of the JavaScript isNaN Function
The syntax for the isNaN function is straightforward:
JavaScript
isNaN(value)
value: The input you want to test. It can be any data type—number, string, boolean, object, etc.
The function returns true if the given value, after being converted to a number, is NaN. Otherwise, it returns false. That boolean result is the return value you use to decide what to do next.
Purpose of the isNaN Function in JavaScript
The main goal of the isNaN function is to detect invalid numerical values. In JavaScript, NaN is a numeric type, but it behaves differently than any other number. One of its strangest characteristics is that it is not equal to itself:
JavaScript
NaN === NaN; // false
This means you can’t rely on direct equality checks to identify NaN. The isNaN function was introduced to solve this issue and help developers validate numerical data reliably.
How the isNaN Function Works
When you pass a value to isNaN, JavaScript first attempts to convert that value into a number using type coercion. Then, it checks whether the result is NaN.
Example 1: Basic Usage
JavaScript
isNaN(100); // false
isNaN("100"); // false
isNaN("hello"); // true
isNaN(NaN); // true
In this example, the string "100" gets converted to the number 100, so the function returns false. But the string "hello" cannot be converted to a number, so it becomes NaN and the function returns true.
Behavior with Different Data Types
The JavaScript isNaN function can produce unexpected results if you’re unaware of how coercion works. Here’s how it behaves with various types of input:
Strings
JavaScript
isNaN("42"); // false
isNaN("42px"); // true
"42" can be converted into a valid number. "42px" cannot, so it results in NaN.
A common example is an empty string, which gets coerced into 0:
JSX
isNaN("");// false ("" becomes 0)
Booleans
JavaScript
isNaN(true); // false
isNaN(false); // false
true becomes 1 and false becomes 0, both of which are valid numbers.
Null and Undefined
JavaScript
isNaN(null); // false
isNaN(undefined); // true
null is coerced into 0, but undefined becomes NaN.
Arrays
JavaScript
isNaN([]); // false
isNaN([1]); // false
isNaN([1, 2]); // true
An empty array or an array with a single number element can be converted to a number. Arrays with multiple elements cannot.
Objects
JavaScript
isNaN({}); // true
isNaN({a: 1}); // true
Objects generally fail numeric coercion and become NaN.
Limitations of isNaN
The isNaN function is useful but not perfect. Because it performs type coercion, it may produce true for values that are not literally NaN. This behavior makes the function less precise in certain cases.
Example
JavaScript
isNaN("hello"); // true
Although "hello" is a string, not a number, the function returns true because converting it to a number results in NaN. This behavior can be problematic in programs that need to differentiate between actual NaN values and non-numeric inputs.
Alternative: Number.isNaN
To address the precision issue, JavaScript introduced Number.isNaN in ECMAScript 2015 (ES6). This function only returns true if the input is actually the NaN value.
Example
JavaScript
Number.isNaN(NaN); // true
Number.isNaN("hello"); // false
Number.isNaN(undefined); // false
Unlike the global isNaN, this version does not perform coercion.
Alternative: The isnan() Method
In some languages and libraries, you’ll see an isnan() method instead of isNaN. Same goal, different spelling and casing. If you hop between ecosystems, that naming difference can throw you off for a second.
Real-World Use Cases for isNaN
1. Validating User Input
Forms often collect data as strings. Before performing calculations, you might want to check if the input can be safely converted into a number.
JavaScript
function validateAge(input) {
const age = parseInt(input);
if (isNaN(age)) {
return "Please enter a valid number.";
}
return `Your age is ${age}`;
}
If you want to parse a value but also care about decimals, parseFloat() can be a better fit than parseInt().
2. Data Cleaning in Arrays
If you’re processing mixed-type arrays, the function can help filter out non-numeric values.
JavaScript
const rawData = ["25", "apple", 32, NaN];
const cleaned = rawData.filter(item => !isNaN(item));
console.log(cleaned); // ["25", 32]
3. Checking Computation Results
Some operations may yield NaN if they encounter invalid operands.
JavaScript
function divide(a, b) {
const result = a / b;
if (isNaN(result)) {
return "Invalid division.";
}
return result;
}
Division is also where you’ll run into edge cases with floating-point math (like rounding issues), so checks like this can save you from weird UI bugs later.
isNaN in Frontend Work
In frontend code, isNaN often shows up when you pull values from inputs and then update the page. For example, a text input gives you a string, and you might convert it before updating the DOM:
JSX
const input =document.querySelector("#age");
const label =document.querySelector("#msg");
input.addEventListener("input",() => {
const value =Number(input.value);
label.textContent =isNaN(value) ?"Enter a number" :`OK: ${value}`;
});
If that value later gets sent to an API, validating it early helps avoid sending garbage data upstream.
The Constructor Angle: Number()
A lot of isNaN confusion comes from conversion rules. One common conversion tool is Number(), which is a constructor function you can call to turn values into numbers:
JSX
Number("42");// 42
Number("hi");// NaN
Using Number(...) makes the conversion step explicit, which can make code easier to reason about than relying on “silent” coercion.
Using isNaN in Loops
The isNaN check is lightweight, which is handy when you’re validating values inside a loop. For example, you might scan a list and stop after the first invalid item:
JSX
const values = ["10","20","oops","30"];
for (let i =0; i < values.length; i++) {
const n =Number(values[i]);
if (isNaN(n)) {
console.log("Bad value at index:", i);
break;
}
}
Here, each pass through the loop is an iteration.
Performance Considerations
The isNaN function is lightweight and fast, making it suitable for frequent checks in loops, validation scripts, and real-time applications. However, due to its coercion behavior, it may not be ideal for every use case. When performance and precision matter, especially with large datasets, consider using Number.isNaN to avoid unnecessary type conversions.
Best Practices for Using isNaN
- Use
isNaNonly when coercion is acceptable or desirable. - Prefer
Number.isNaNfor stricter equality checks. - Combine
isNaNwith type checks usingtypeofto avoid unexpected results.
JavaScript
function safeCheck(value) {
return typeof value === "number" && isNaN(value);
}
This ensures you're only evaluating true numbers.
Summary
The JavaScript isNaN function is a valuable tool for detecting NaN values, especially when dealing with dynamic or user-generated data. While its behavior may seem confusing at first due to automatic type coercion, it becomes intuitive with practice. When used carefully, it helps catch data anomalies and prevent logical errors in your programs.
For more precise checks, modern JavaScript environments offer Number.isNaN, which should be your go-to option when type coercion is not desired. Understanding both versions allows you to write safer and more accurate code across various use cases.
If you're building applications that rely on numeric operations, validations, or mathematical calculations, knowing how to use isNaN in JavaScript effectively will make your code more robust and error-resistant.
Join 35M+ people learning for free on Mimo
4.8 out of 5 across 1M+ reviews
Check us out on Apple AppStore, Google Play Store, and Trustpilot