• hperrin@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        5 days ago

        I’ve never really found the type conversions that bizarre, unless you’re doing something weird like casting an array to a string or number. I don’t really use strange type casts, since I use TypeScript and avoid using the “==“ operator. What other things make it not good?

        • arcterus@piefed.blahaj.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          5 days ago

          I mean, just the fact that you’re using TS instead of plain JS (and that TS even exists) should tell you that the language has issues…

          • hperrin@lemmy.ca
            link
            fedilink
            English
            arrow-up
            0
            ·
            5 days ago

            It’s just strict typing on top of plain JS. I like strict typing. Some people like loose typing.

            • ChickenLadyLovesLife@lemmy.world
              link
              fedilink
              English
              arrow-up
              1
              ·
              5 days ago

              I started my career with Visual Basic (3!) and I appreciated the loose typing because it meant I could get going and actually have something running quickly as a newbie. A few years later I switched to C# and saw how an entire class of errors disappeared because of the strong typing. Both have their place, depending on the skill level of the coder and the needs of the application.

          • hperrin@lemmy.ca
            link
            fedilink
            English
            arrow-up
            0
            ·
            5 days ago

            Considering TypeScript is a superset of JavaScript, you certainly can. But, that generally means you’re using TypeScript poorly.

              • hperrin@lemmy.ca
                link
                fedilink
                English
                arrow-up
                1
                ·
                5 days ago

                Yeah, I’ve seen a lot of those videos where they do things like {} + [], but why would anyone care what JS does in that case? Unless you’re a shit-ass programmer, you’re never going to be running code like that.

                The idea behind that kind of type conversion was that JS was originally designed to be extremely lenient. If it ever crashed, the web page would freeze, so it lets you do things other languages just crash from, like divide by zero.

                • namingthingsiseasy@programming.dev
                  link
                  fedilink
                  arrow-up
                  1
                  ·
                  5 days ago

                  Yeah, I’ve seen a lot of those videos where they do things like {} + [], but why would anyone care what JS does in that case? Unless you’re a shit-ass programmer, you’re never going to be running code like that.

                  By this same logic, memory safety issues in C/C++ aren’t a problem either, right? Just don’t corrupt memory or dereference null pointers. Only “a shit-ass programmer” would write code that does something like that.

                  Real code has complexity. Variables are written to and read from all sorts of places and if you have to audit several functions deep to make sure that every variable won’t be set to some special value like that, then that’s a liability of the language that you will always have to work around carefully.

                  • hperrin@lemmy.ca
                    link
                    fedilink
                    English
                    arrow-up
                    1
                    ·
                    5 days ago

                    No.

                    By that same logic, memory safety issues in C/C++ don’t make them bad programming languages.

                    If you’re worried about it, like you’re accepting input from the user, sanitize it.

                    if (typeof userProvidedData !== "string") {
                      throw new Error("Only works on strings.");
                    }
                    

                    Better yet, put that in a function called assertString.

                • FishFace@piefed.social
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  5 days ago

                  A language’s deficiencies are rarely obvious when everyone is writing it perfectly.

                  But a coherent type system gives the programmer confidence - for free. Do you know what [1] + [2] is in JavaScript? Do you know what type it is? JavaScript teaches you that it has operator overloading for built-in types but then it behaves in such a dumb way you can’t use it.

                  That’s explained by a desire to be extremely lenient, but it’s not justified by it. Programming langauges are generally not made by idiots, so every bad decision has an explanation.

                  • hperrin@lemmy.ca
                    link
                    fedilink
                    English
                    arrow-up
                    1
                    ·
                    5 days ago

                    I would assume [1] + [2] would give you either 0 or 2, but maybe "12". But why you ever write that? I’ve never bothered to memorize what happens there because I would never write that. The plus operator is not for arrays. It’s for numbers and strings. If you’re trying to concatenate arrays, there’s a function for that. Would you do that in Java or C? People trying to make JavaScript do silly things just because it refuses to crash when you do then calling the language bad for it is just silly to me.

      • hperrin@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        5 days ago

        Yes, if you do silly things with JS, you generally get silly results instead of TypeErrors. I wouldn’t say that makes the language bad. It makes the language resilient to bad programming, which you’d generally want in the case of web pages.