JavaScript is notorious for its inconsistencies in a lot of areas. It's also powerful and popular and has a lot going for it.
But can we poke fun at weird things? (whether or not the behavior is a good thing in general)
Let's start with an example:
+'a'
resolves to NaN
("Not a Number") because it coerces a string to a number, while the character a
cannot be parsed as a number
document.write(+'a');
nan
.
Adding NaN
to "ba"
turns NaN
into the string "NaN"
due to typeβ¦
Oldest comments (85)
Without a doubt I'll say this: jsfuck.com/
check out the source for a full list of the nonsense they leverage. I feel like "explain each line of this file to yourself" is probably a pretty good JS litmus test.
My work firewall thinks this is porn.
Ryan, HR needs to now why you're searching for programmers porn during work hours
Clearly :D
My favorites...
Most languages do this, but it could be a whole lot worse (fun fact, IEEE 754 actually allows for (2 ^ N) - 1 distinct
NaN
values not counting signedNaN
values, where N is the bit width of the significand field in the binary representation (so for the 8-byte floats JS uses, there are 18014398509481982 possible NaN values including both signed values)).The reason is simple,
NaN
is a numeric representation of a non-numeric value, so by definition it has to be the same type as numbers for the language (or, at minimum, it has to be at least one of the numeric types in the language), but you can't be certain what value it is, so you can't treat twoNaN
values as being identical.Wat is a funny talk about odd behaviors. JS starts at 1:22.
this is
Obligatory
This took an hour of my life:
omg thank you for your service as I really didnβt know about this.
yep, a good check for an actual object is
Kind of insane they did that that.
Or
Object.prototype.toString.call(thing)
It's not insane.
null
, likenil
in ruby, a singleton instance of NilClass is technically an object.Technically an array is also an object, which is why there is Array.isArray (which has its own caveats).
But at least ruby is rigorously consistent OO like that.
In JS there are very few object-type calls that work in any way with nulls, so it's neat that they aimed to make this aspect of the language more OO, but they should have followed through better.
typeof(null)
being 'object' is seldom anything but annoying for JS devs.eg.
Basically there are very few times you might write
typeof(thing)==='object'
where you shouldn't do the null check tooAbsolutely true. I was only referring to the use of the word "insane" which just sounds very unknowing/ignorant to me.
FWIW, now that we use TS for most things, this is not problem for us often, except for when something is nullable Γ‘nd multiple types (object/number/string/undefined).
My recommendation is to never use
null
and only useundefined
. Replace your "null"s with an "EMPTY/UN_SET" data type.Fair enough. I didn't mean insane in the sense of completely without reason, just in the sense that it was badly thought out.
The thing is that nulls are now baked into JS at a few levels, so in our own code we can avoid them, but they pop up throughout the various JS apis, eg
That's what I mean by the loose "insane" comment. It was a mistake that was bad enough that as JS devs we're now best off to generally avoid the fundamental null value in JS.
I totally agree with you about TS, which corrects many of these issues, and how in JS we're best to use
undefined
whereever possible.I find these very funny:
I observed a weird thing with js and started an discussion on it
dev.to/nijeesh4all/why-two-small-f...
Thanks to @da-ti for the explanation
There is one that I can't remember precisely, but JavaScript cannot add 2.637 or something like that the result is wrong. I will have to look this up.
Adding floats. It won't give the right answer. It's a common problem in programming languages.
Yeah I had a suspension that was the case. Still it's odd and it doesn't not affect JavaScript so I'm technically correct. π
That's the one! Thanks!
This is batshit don't you think?