• Julian@lemm.ee
    link
    fedilink
    arrow-up
    24
    arrow-down
    1
    ·
    edit-2
    1 year ago

    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
      link
      fedilink
      arrow-up
      15
      arrow-down
      1
      ·
      edit-2
      1 year ago

      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? :-)

      edit: as several people already pointed out, my answer is not accurate. The real solution was mentioned by mycus

      • hstde@lemmy.fmhy.ml
        link
        fedilink
        arrow-up
        2
        ·
        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.