this post was submitted on 16 Jun 2023
27 points (100.0% liked)

Programmer Humor

854 readers
12 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] julianh@lemm.ee 4 points 1 year ago* (last edited 1 year ago) (1 children)

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.

[–] RagingToad@feddit.nl 3 points 1 year ago (2 children)

I'm not sure if you really want to know, but:

greater than, smaller than, will cast the type so it will be 0>0 which is false, ofcourse. 0>=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? :-)

[–] mycus@kbin.social 3 points 1 year ago

isn't === the one that compare types first?

I just tried on node and 0 == '0' returns true


found the real reason

[–] hstde@lemmy.fmhy.ml 0 points 1 year ago

Not a JavaScript dev here, but I work with it. Doesn't "==" do type coercion, though? Isn't that why "===" exists?

As far as I know the operators ">=" and "<=" are implemented as the negation of "<" and ">" respectively. Why: because when you are working with sticky ordered sets, like natural numbers, those operators work.

Thus "0<=0" -> "!(0>0)" -> "!(false)" -> "true"

Correct me if my thinking is wrong though.