• @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
          }