publicdebates 21 hours ago

Guessed 2 of the first 3 questions.

Got to question 4 and gave up:

    new Date("not a date")
    1) Invalid Date
    2) undefined
    3) Throws an error
    4) null
There's literally no way of guessing this crap. It's all random.
  • dvt 19 hours ago

    I had no idea we even had an `Invalid Date` object, that's legitimately insane. Some other fun ones:

        new Date(Math.E)
        new Date(-1)
    
    are both valid dates lol.
  • winstonp 21 hours ago

    the new Date() constructor is an amalgamation of like 5 different specs, and unless the input matches one of them, which one kicks in is up to the implementer's choice

  • marcosdumay 20 hours ago

    The choice here is really surprising. I was half-expecting NaN, that you omitted.

    Is there any other instance of the standard JS library returning an error object instead of throwing one? I can't think of any.

    • jazzyjackson 18 hours ago

      I think NaN itself is a bit of an error object, especially in how it's passed through subsequent math functions, which is a different choice than throwing up.

      But besides that I think you're right, Invalid Date is pretty weird and I somehow never ran into it.

      One consequence is you can still call Date methods on the invalid date object and then you get NaN from the numeric results.

    • WorldMaker 14 hours ago

      The fun trick is that Invalid Date is still a Date:

          > let invalid = new Date('not a date')
          > invalid
          Invalid Date
          > invalid instanceof Date
          true
      
      You were half-correct on expecting NaN, it's the low level storage of Invalid Date:

          > invalid.getTime()
          NaN
      
      Invalid Date is just a Date with the "Unix epoch timestamp" of NaN. It also follows NaN comparison logic:

          > invalid === new Date(NaN)
          false
      
      It's an interesting curio directly related to NaN.
      • tyilo 7 hours ago

        > Invalid Date is just a Date with the "Unix epoch timestamp" of NaN. It also follows NaN comparison logic: > > > invalid === new Date(NaN) > false

        This is just because a JS Date is an object and have nothing to do with the inner representation.

            > new Date(0) === new Date(0)
            false