W3docs

javascript

What is the result of 'typeof NaN' in JavaScript?

Pratique Seu Conhecimento

What is the result of 'typeof NaN' in JavaScript?

Explicação

Understanding 'typeof NaN' in JavaScript

The JavaScript typeof operator is a convenient tool that allows developers to determine the data type of a given variable or value. When applied to NaN, typeof NaN, it surprisingly results in 'number'.

The 'NaN' Value and Its Type

In JavaScript, NaN stands for 'Not a Number'. It's a special value that indicates the result of an operation that doesn't logically produce a number. For example, if you attempted to subtract a string from a number, JavaScript isn't able to come up with a numerical result, so it assigns the operation a value of NaN.

Let's consider a simple example:

let result = 'cat' - 7;
console.log(result);  // Prints: NaN

Despite its name, in JavaScript, NaN is actually considered a number. This might seem counterintuitive, because NaN means 'Not a Number', but it's part of the ECMAScript standard, which JavaScript follows.

Here is a confirmation example:

console.log(typeof NaN);  // Prints: 'number'

Practical Examples and Applications

The result of typeof NaN returning 'number' can have practical implications in your code. For example, you may have a function that checks if a value is a number before performing numeric operations. If you use typeof to make your check, NaN will pass - potentially leading to bugs or wrong results.

To safely check for a number and exclude NaN, you might opt for something like:

function isNumber(value) {
  return typeof value === 'number' && !isNaN(value);
}

With this function, NaN will return false, while legitimate numbers will return true.

Best Practices and Additional Insights

Although the fact that JavaScript considers NaN a number can be confusing, understanding this aspect of the language is important for anticipating and preventing potential bugs in your code.

Remember, JavaScript is a loosely typed language and NaN is a tricky case where what you see ('Not a Number') is not what you get when using typeof ('number'). Therefore, always use specific methods or combinations to validate data types and handle exceptional cases like NaN.

Quer mais? Faça o quiz completo de Javascript Basics.

Iniciar Quiz