Why does Number.isNaN() return false for Strings?

Viewed 5282

As per my understanding NaN stands for Not A Number. Strings are not definitely Numbers and hence I expect the below code to return true for Strings. However, it's not the case.

console.log(Number.isNaN("Stack Overflow"));

Could somebody please clarify this?

8 Answers

I had to do this

Number.isNaN(Number("Stack Overflow")) // returns true
Number.isNaN(Number(false)) // returns false (unfortunately)
Number.isNaN(Number(12)) // returns false
Number.isNaN(Number(12.02)) // returns false

This seems weird but once understood that NaN means "Not a Number" in a strict sense described here Why does typeof NaN return 'number'? (division by zero, etc), this is what I use:

typeof value === "number" && !isNaN(value)
Related