> "Not a Number"
> Look inside.
> number
post
It's of type Numbn't.
I think this, and the fact that NaN == NaN is false, make perfect sense.
NaN is the result of mathematically undefined behavior. You’re not going to get a NaN outside of a number context, so tying it together in the Number scope is fine.
duh, it's part of the IEEE 754 standard. every language that handles floating point numbers has NaN handling, and in every language NaN is a float. the only reason this is brought up as a javascript thing all the time is that js doesn't have separate float and int types (aside from special structures like typed arrays and dataviews), it just defaults to float64 for simplicity and calls it number, which lines up with the "NaN is a number? nani???" joke.
you don't like it? consult the sorry excuse of thinking sand in the device you're reading this on, because this is etched straight into it. every FPU capable of handling float32 and float64 numbers knows what NaN is and handles it the exact same way.
this is one of the many things that sound unintuitive about programming but if you bother to understand the context you realise that if it wasn't this way, it would be way worse. one of the most important skills in our field is to understand computers for what they are, rather than be puzzled that they aren't what you thought they were, and it especially comes out in edge cases like this.
To add to this: the state of being not a number is only relevant to a number. Everything that’s already not a number doesn’t need a specific value to represent this state. It’s actually quite logical.
Apparently one of the few examples of JS not being weird.
https://www.destroyallsoftware.com/talks/wat is much better. This post is pretty low-effort.
The way I think about it: number is a js type. A floating point double, in other languages.
NaN is a state that a number type can be in, representing a situation where the outcome of the numeric operation cannot be determined.
Anywho, also yea ….JavaScript is goofy
JavaScript really isn't as bad as people want it to be
Technically everything is a number when you get low enough
Infinity is also a number in JavaScript / IEEE number formats, but you'll get a lot of grumbling from mathematicians with that sort of assertion.
Once you accept that each float represent a range of reals most design decisions make sense.
Infinity is just the name given to values that are too large to represent otherwise and negative zero includes negative values too close to zero.
What mathematics probably hate most about floats is that rounding breaks commutativity.
What mathematics probably hate most about floats is that rounding breaks commutativity.
Actually, the maths people in my circles tend to complain more about how the normal floating-point equality test doesn't define an equivalence relation, but really any of the violations of field properties can attract complaints.
this makes sense
NaN is a "this was meant to be a number but it somehow isnt"
Stop calling it "NaN bread" -- NaN is fucking bread!
It is the number that must not be; that cannot be. These 3 letters are all that stand between you and the ultimate cosmic horror.
It is not for nothing that the sender of eight is also known as the soul-render. Which is why a sensible wizard will never mention the number if they can avoid it. "Or you'll be eight alive."
The beauty of JavaScript.
You probably haven't encountered truthsy and falsy values yet?
all 49 comments