• mindbleach
    link
    fedilink
    arrow-up
    14
    ·
    10 months ago

    JS is a language where [1,2,11].sort() returns [1,11,2].

    And if you use a variable instead of a bare array, half the functions are side-effectful, as determined by coin toss.

    And if you try declaring that variable with new Array(3).map() then it will ignore all 3 indices, because undefined is real enough to be enumerated, but not real enough to be iterated, because, and I cannot overstress the importance of this principle in Javascript, go fuck yourself. Go fuck yourself is why.

    • Kindness@lemmy.ml
      link
      fedilink
      arrow-up
      5
      ·
      10 months ago

      typeof(null) == ‘object’

      Because some people think planning an entirely new language should take less than 2 weeks. 10 days, in this case.

      See wat for more.

    • PoolloverNathan@programming.dev
      link
      fedilink
      arrow-up
      5
      ·
      10 months ago

      Array(3) doesn’t create [undefined, undefined, undefined, ]; it creates [/* hole */, /* hole */, /* hole */, ]. The holes don’t set any property on the array whatsoever, so they are skipped when iterating. How this makes sense, I can’t tell you.

      • mindbleach
        link
        fedilink
        arrow-up
        1
        ·
        9 months ago

        The Wimp Lo doctrine is a valid theory for why JS is Like That.

        If there’s two ways to do something, JS picks all three.