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.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.It's the internal inconsistencies that get me. Like, OK, I understand that there might be some quirks, maybe due to some weird backwards compatibility or technical limitation, but there are multiple incompatible quirks _inside_ this single interface! It's terrible, and things like this are a huge part of the reason JS was long considered (and sometimes still is) a Not So Good language.
new Date(Math.E)
new Date(-1)
are both valid dates lol.Is there any other instance of the standard JS library returning an error object instead of throwing one? I can't think of any.
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.
> 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.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