I also am not familiar with javascript anymore…precisely because of this, exact, insane bullshit.
B… and/or C… evaluating as FALSE are the only things that… should even kind of make sense, according to my brain.
Though at this point in my life, I have unironically had a good number of concussions and contusions, so … well you’d think that would help with JS development.
Javascript is insanity, and I am still convinced it is at least 40% responsible for Notch losing his goddamned mind.
‘null’ is somehow an object. because fuck you, thats why!
Is… 0 == ‘’ … is that two single quotes ’ ’ ?
Or one double quote " ?
If… it is one double quote… that wouldn’t even evaluate, as it would just be an empty string without a defined end…
But if it was two single quotes… that would just be a proper empty string… and because of forced type coercion, both 0 and ‘’ are FALSE when compared with ==, but not when compared with ===, because that ignores forced type coercion…
It’s pretty easy to avoid all of these, mostly by using ===. Null being an object is annoying and is one of the reasons ‘typeof’ is useless, but there are other ways to accomplish the same thing.
JavaScript has a lot of foot guns, but it’s also used by literally everyone so there is a lot of tooling and practice to help you avoid them.
I also am not familiar with javascript anymore…precisely because of this, exact, insane bullshit.
B… and/or C… evaluating as FALSE are the only things that… should even kind of make sense, according to my brain.
Though at this point in my life, I have unironically had a good number of concussions and contusions, so … well you’d think that would help with JS development.
Javascript is insanity, and I am still convinced it is at least 40% responsible for Notch losing his goddamned mind.
‘null’ is somehow an object. because fuck you, thats why!
Is… 0 == ‘’ … is that two single quotes ’ ’ ?
Or one double quote " ?
If… it is one double quote… that wouldn’t even evaluate, as it would just be an empty string without a defined end…
But if it was two single quotes… that would just be a proper empty string… and because of forced type coercion, both 0 and ‘’ are FALSE when compared with ==, but not when compared with ===, because that ignores forced type coercion…
https://www.w3docs.com/snippets/javascript/when-to-use-double-or-single-quotes-in-javascript.html
Oh my fucking god WHY?!
Just fucking use one special character to delimit strings!
Don’t have two that don’t work together and also behave differently even when you pick just one of them… GraaaghhH!
brb, figuring out where Larry Ellison lives…
Notch? The guy who codes in java?
That’s just short for JavaScript, isn’t it?
Java is actually twice faster cause the name is twice shorter
It’s pretty easy to avoid all of these, mostly by using ===. Null being an object is annoying and is one of the reasons ‘typeof’ is useless, but there are other ways to accomplish the same thing.
JavaScript has a lot of foot guns, but it’s also used by literally everyone so there is a lot of tooling and practice to help you avoid them.
I don’t think my sanity can take all of these explanations.
Though I just spotted one that’s worse than null being an object …
I mean, come on… it’s even in the fucking name!
Edit - fixed capitalisation in ‘NaN’
Douglas Crockford has a whole chapter of these in his latest book. There’s also this classic video.
Number = IEEE-754 double precision float, which includes NaN, so it makes sense