• @joneskind
    link
    1
    edit-2
    7 months ago

    When my console throws a NaN I kinda think of it as an Halloween kid receiving a fruit instead of a candy. They won’t say “That’s a fruit”. They’ll say “That’s not a treat”.

    I’m personally pissed more often by a falsy 0.

    Did you know that early analog computers would literally explode when asked to divide by 0?

    Now computers just say “Hey stupid, that shit is not even a Number in a mathematical sense, but sure I’ll add one to it.” instead of “Why would you kill me like this?”

    You can’t really define Infinity as a number, yet it is part of their world.

    So typeof NaN === ‘number’ totally makes sense in that regard.

    If you ever worked with arrays of dates, don’t judge NaN too harshly.

    • @Skullgrid
      link
      17 months ago

      Falsy zero? What’s wrong with that, 1 is true and 0 is false. I thought that was standard logic?

      • @joneskind
        link
        17 months ago

        in javascript a property is truthy if it exists

        myThing.property = "some string"
        
        if (myThing.property) { // true
          // do something
        }
        

        It works with everything except of course for falsy values

        myThing.number = someNumberThatShouldNotBeEqualToZero
        
        if (myThing.number) {
          // do something very important with that number that should not be equal to zero
        }
        
        // This can fail at anytime without warning
        

        So you’ve got to be extra careful with that logic when you’re dealing with numbers.

        I am not saying it’s wrong though. I’m saying it’s often annoying.

        • @Skullgrid
          link
          17 months ago

          ah ok , I think I write this a bit more verbose when using other languages, instead of

          if(thing)
          {
             stuff;
          }
          
          

          I do

          
          if(thing != null)
          {
             stuff;
          }
          

          so checking for numbers being truthy & existing didn’t seem like an issue

          • @joneskind
            link
            1
            edit-2
            7 months ago

            In the case of a non-existing property, the value would be undefined rather than null.

            And while == and != exist in JavaScript, most linters will throw an error and require a === and !== instead as they should be avoided.

            null == undefined // true
            null === undefined // false
            

            Besides, null is a perfectly valid value for a property, just as 0. Working with API Platform, I couldn’t tell the number of times I used this kind of statement:

            if (property || property === null) {
              // do some stuff
            }
            

            Probably just as much as

            if (property || property === 0) {
              // do some stuff
            }