Skip to content

JavaScript NaN property | Not-A-Number

  • by

JavaScript NaN’s full form is “Not-a-Number“. The global NaN property is a value representing Not-A-Number. The NaN property is a global property that represents the value NaN.

Number.NaN

NaN is a property of the global object. In other words, it is a variable in the global scope.

Here are some key points about NaN in JavaScript:

1. Result of invalid arithmetic operations: When certain arithmetic operations or functions in JavaScript encounter invalid operands or return values that cannot be represented as meaningful numbers (e.g., dividing zero by zero), the result is NaN.

2. Data type: NaN is a value of the Number data type.

3. NaN is not equal to anything: Surprisingly, NaN is not equal to itself, which means you cannot check for NaN using the normal equality comparison (==) or strict equality comparison (===) operators. For example:

console.log(NaN === NaN); // false
console.log(NaN == NaN); // false

To check if a value is NaN, you can use the global function isNaN():

console.log(isNaN(NaN)); // true
console.log(isNaN(42)); // false
console.log(isNaN("Hello")); // true, because converting "Hello" to a number results in NaN

4. Testing for NaN: Prior to ECMAScript 6 (ES6), the common way to check for NaN was using the isNaN() function. However, it had some issues because it attempted to convert non-numbers to numbers before testing. In ES6 and later versions, you can use Number.isNaN() to more accurately check for NaN:

console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(42)); // false
console.log(Number.isNaN("Hello")); // false, because it doesn't attempt to convert "Hello" to a number

Note: NaN is a specific value representing “Not-a-Number” and is not equal to any other value, including itself. Therefore, it requires special handling when encountered in mathematical operations or when checking for its presence in a variable.

JavaScript NaN

Simple example code

<!DOCTYPE html>
<html>
<body>

  <script>
    let x = Number.NaN;
    console.log(x)

    let z = NaN;
    console.log(z)

  </script>

</body>
</html> 

Output:

JavaScript NaN property

Standard built-in objects – NaN

function sanitise(x) {
  if (isNaN(x)) {
    return NaN;
  }
  return x;
}

console.log(sanitise('1'));
// Output: "1"

console.log(sanitise('NotANumber'));
// Output: NaN

Testing against NaN

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true
Number.isNaN(NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

Comment if you have any doubts or suggestions on this JS NaN topic.

Note: The All JS Examples codes are tested on the Firefox browser and the Chrome browser.

OS: Windows 10

Code: HTML 5 Version

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *