• @[email protected]
    link
    fedilink
    English
    6022 hours ago

    I’m no expert and I know that javascript is full of wtf moments, but please… Let it be B

    It’s not gong to be B, it’s it.

    • @[email protected]
      link
      fedilink
      English
      24
      edit-2
      21 hours ago

      It’s C, NaN is never equal to itself in floating point, that’s not just a JS thing.

    • @[email protected]
      link
      fedilink
      7221 hours ago

      It is true. Math.min() returns positive Infinity when called with no arguments and Math.max() returns Negative Infinity when called with no arguments. Positive Infinity > Negative Infinity.

      Math.min() works something like this

      def min(numbers):
        r = Infinity
        for n in numbers:
          if n < r:
            r = n
        return r
      

      I’m guessing there’s a reason they wanted min() to be able to be called without any arguments but I’m sure it isn’t a good one.

      • @[email protected]
        link
        fedilink
        English
        3220 hours ago

        So, the language isn’t compiled (or wasn’t originally) so they couldn’t make min() be an error that only a developer saw, it has to be something that the runtime on the end-user system dealt with. So, it had to be assigned some value. Under those restrictions, it is the most mathematically sound value. It makes miniumum-exactly-2(x, min(<…>)) be exactly the same as min(x, <…>), even when the “<…>” has no values.

        As a developer, I see a lot of value in static analysis, including refusing to generate output for sufficiently erroneous results of static analysis, so I don’t like using JS, and the language that I tinker with will definitely have a separate compilation step and reject the equivalent of min(). But, if I HAD to assign something like that a value, it probably would be a representation of infinity, if we had one (probably will due to IEEE floats).

        HTH

        • @[email protected]
          link
          fedilink
          612 hours ago

          The language not being compiled has nothing to do with error handling. You could have a min function that operates on dynamic arrays (e.g. std::min_element in C++ or min() in Python).

          • @[email protected]
            link
            fedilink
            English
            11 hour ago

            Not having a separate compilation step absolutely affects error handling. With a compilation step, you can have errors that will only be seen by and must be address by a developer prior to run time. Without one, the run time system, must assign some semantics to the source code, no matter how erroneous it is.

            No matter what advisory “signature” you imagine for a function, JS has to assign some run time semantics to that function being called incorrectly. Compiled languages do not have to provide a run time semantics to for signatures that can be statically checked.

      • @[email protected]
        link
        fedilink
        8
        edit-2
        20 hours ago

        Math.min.length is 2, which weakly signals that it’s designed to handle at least two parameters

        Why would they even define this value?

        Note: I’m not a js dev, do most functions have length?

        • @[email protected]
          link
          fedilink
          1119 hours ago

          I am also not a JS dev, we possibly aren’t brain damaged enough to understand the perfection.

          • @[email protected]
            link
            fedilink
            59 hours ago

            Most people don’t use JS because they think it’s perfect… they use it because it’s the language that works on web browsers… or because thier coworkers made something in it… or because the library that does what they want uses it…

              • @[email protected]
                link
                fedilink
                English
                11 hour ago

                JS is the machine code of the web. Fewer and fewer people might write it directly, but it will live as long as the web platform does.

        • @[email protected]
          link
          fedilink
          English
          1
          edit-2
          1 hour ago

          All functions built with function name(args) { body } syntax have a length based on the form of args. Other ways to create functions might set length (I’m not sure). Most of the functions provided by the runtime environment do have a length, usually based on the number of “required” arguments.

    • @[email protected]
      link
      fedilink
      English
      13
      edit-2
      18 hours ago

      I also am not familiar with javascript anymore…precisely because of this, exact, insane bullshit.

      B… and/or C… evaluating as FALSE are the only things that… should even kind of make sense, according to my brain.

      Though at this point in my life, I have unironically had a good number of concussions and contusions, so … well you’d think that would help with JS development.

      Javascript is insanity, and I am still convinced it is at least 40% responsible for Notch losing his goddamned mind.

      ‘null’ is somehow an object. because fuck you, thats why!

      Is… 0 == ‘’ … is that two single quotes ’ ’ ?

      Or one double quote " ?

      If… it is one double quote… that wouldn’t even evaluate, as it would just be an empty string without a defined end…

      But if it was two single quotes… that would just be a proper empty string… and because of forced type coercion, both 0 and ‘’ are FALSE when compared with ==, but not when compared with ===, because that ignores forced type coercion…

      https://www.w3docs.com/snippets/javascript/when-to-use-double-or-single-quotes-in-javascript.html

      Oh my fucking god WHY?!

      Just fucking use one special character to delimit strings!

      Don’t have two that don’t work together and also behave differently even when you pick just one of them… GraaaghhH!

      brb, figuring out where Larry Ellison lives…

        • lad
          link
          fedilink
          English
          210 hours ago

          That’s just short for JavaScript, isn’t it?

          • Zos_Kia
            link
            fedilink
            17 hours ago

            Java is actually twice faster cause the name is twice shorter

      • @[email protected]
        link
        fedilink
        English
        215 hours ago

        It’s pretty easy to avoid all of these, mostly by using ===. Null being an object is annoying and is one of the reasons ‘typeof’ is useless, but there are other ways to accomplish the same thing.

        JavaScript has a lot of foot guns, but it’s also used by literally everyone so there is a lot of tooling and practice to help you avoid them.

      • @[email protected]
        link
        fedilink
        English
        4
        edit-2
        10 hours ago

        I don’t think my sanity can take all of these explanations.

        Though I just spotted one that’s worse than null being an object …

        typeof NaN
        "number"
        

        I mean, come on… it’s even in the fucking name!

        Edit - fixed capitalisation in ‘NaN’