• NateNate60@lemmy.world
    link
    fedilink
    arrow-up
    45
    arrow-down
    3
    ·
    3 days ago

    This diagram is nonsense. JavaScript programmers know to simply never use == but to use === instead. Half of JavaScript is like this. Oh, there’s a feature, but it behaves in a super weird way so we don’t use it to avoid the weirdness.

    • ParlimentOfDoom@piefed.zip
      link
      fedilink
      English
      arrow-up
      12
      arrow-down
      1
      ·
      2 days ago

      As someone trying to learn Javascript, it just makes me mad that at this garbage heap of a language is so widely used.

      • Victor@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        2 days ago

        The problem is that you can’t break compatibility.

        Only in some exceptional cases. 🙃

          • Victor@lemmy.world
            link
            fedilink
            arrow-up
            3
            ·
            2 days ago

            Personally, I’d love to break compatibility for better features and consistency. We should be able to declare the version at the top of the file or something. Nothing at the top = legacy crap. 🤷‍♂️ I dunno.

    • dan@upvote.au
      link
      fedilink
      arrow-up
      13
      ·
      3 days ago

      The recommended ESLint rules catch most of the bad stuff, and these days this is all you need in your ESLint config to enable them:

      import {defineConfig} from 'eslint/config';
      import js from '@eslint/js' 
      
      export default defineConfig([
        js.configs.recommended,
      ]; 
      

      There’s one use case where == is still commonly used: == null matches both null and undefined. Lint rules that block == usually allows the null case as an exception.

      • Venator@lemmy.nz
        link
        fedilink
        arrow-up
        4
        ·
        3 days ago

        I wonder how much bandwidth is wasted on the extra =, since it survives minification 😅

        • Ignotum@lemmy.world
          link
          fedilink
          arrow-up
          7
          ·
          3 days ago

          But if every single comparison used in a file is a triple =, then any compression algo worth its weight in salt will compress that bloat away during transmission

          The real issue is all the precious precious RAM those extra = use on the client device once received and unpacked!

        • 9point6@lemmy.world
          link
          fedilink
          arrow-up
          3
          ·
          3 days ago

          Gzip (any properly configured static server will serve compressed assets) probably compresses them down so probably a single extra byte per file

          • dan@upvote.au
            link
            fedilink
            arrow-up
            3
            ·
            2 days ago

            Gzip is old-school. The majority of modern sites use Brotli now. It’s slower to compress, but that’s not normally an issue for static resources (CSS, JS, etc) because they can be pre-compressed during the build and the web server serves the pre-compressed files instead of dynamically compressing them.

    • Denys Nykula@piefed.social
      link
      fedilink
      English
      arrow-up
      2
      ·
      2 days ago

      == has never, ever caused me a single issue. Parsing all server input with type-safe schemas makes sure that where I expect a string, I get a string; where I expect a number, I get a number. Bad data must result in an error before it reaches logic.

        • grue@lemmy.world
          link
          fedilink
          arrow-up
          2
          ·
          2 days ago

          I wonder how many millions of programmer man-hours have been wasted working around JavaScript’s design mistakes that could’ve been saved simply by putting Scheme or Python (which were actually being considered) in the browser instead.

        • Denys Nykula@piefed.social
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 days ago

          Opposite, living in a house of cards is when you blindly trust data that comes from user. Regardless of the language. eqeqeq isn’t in the recommended linting presets because if you end up needing it, you’re probably already in big trouble because of insecure software design.

            • Denys Nykula@piefed.social
              link
              fedilink
              English
              arrow-up
              0
              ·
              1 day ago

              Then where do you see the house of cards? What’s the practical difference between == and ===, when your app is type-checked and the inputs are safely parsed?

              • NateNate60@lemmy.world
                link
                fedilink
                arrow-up
                1
                ·
                15 hours ago

                Because you don’t know whether you’ve actually type-checked everything and that your inputs are safely parsed. Part of defensive programming is to adopt multiple defences to prevent bad data from getting through, including avoiding ==.

    • 9point6@lemmy.world
      link
      fedilink
      arrow-up
      5
      ·
      3 days ago

      IIRC modern linter rulesets generally just outright error if you do anything remotely like this.

    • diaphragmwp@discuss.tchncs.de
      link
      fedilink
      arrow-up
      2
      arrow-down
      1
      ·
      2 days ago

      When I had to use JS I wrote JS 1.2 because why not. Fun how I had strings of numbers instead of actual numbers in some for loops, yet it all sort of functioned until something didn’t. I then decided to add Number() to random values just in case.