POV: you don’t understand type coercion
This one is one of my favourite JS quirks:
Wait wtf is happening there?
parseInt is meant for strings so it converts the number there into a string. Once the numbers get small enough it starts representing it with scientific notation. So
0.0000001
converts into"1e-7"
where it then starts to ignore thee-7
part because that’s not a valid int, so it is left with1
https://javascript.plainenglish.io/why-parseint-0-0000001-0-8fe1aec15d8b
Can someone explain this? I mean, the last result. Usually I can at least understand Javascript’s or PHP’s quirks. But this time I’m stumped.
JS null and undefined shenanigans
basically:
- bigger an lesser comparison types convert null to zero, so is zero bigger or lesser than zero? no
==
is fucky and to it null only equals undefined and undefined only equals null (and themselves), so no- is zero bigger than or equal to zero? yeah
Ugh, thanks, of course. Stupid brain.
I’m starting to think JS maintainers have a thing against mathematicians
more likely against humans
Ok some of these I understand but what the fuck. Why.
Edit: ok I have a theory. == checks equality without casting to any types, so they’re not equal. But < and > are numeric operations, so null gets cast to 0. So <= and >= cast it to 0, and it’s equal to 0, so it’s true.
I’m not sure if you really want to know, but:
greater than, smaller than, will cast the type so it will be
0
which is false, ofcourse.=0
is true.Now
==
will first compare types, they are different types so it’s false.Also I’m a JavaScript Dev and if I ever see someone I work with use these kind of hacks I’m never working together with them again unless they apologize a lot and wash their dirty typing hands with… acid? :-)
edit: as several people already pointed out, my answer is not accurate. The real solution was mentioned by mycus