- cross-posted to:
- programming@programming.dev
- cross-posted to:
- programming@programming.dev
cross-posted from: https://programming.dev/post/33754840
new Date(“wtf”)
In the process of being replaced.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal
JavaScript has had the
Date
object for handling date and time since its first days. However, theDate
API is based on the poorly designedjava.util.Date
class from Java, which was replaced in the early 2010s; but, because of JavaScript’s goal of backward compatibility,Date
sticks around in the language.Damn, I thought you meant JavaScript itself was being replaced.
One can only
undefined
Hmm, I can believe that it was based on
java.util.Date
, but I don’t remember that being as unpredictable. I guess, a different API to begin with, would have avoided a lot of problems, though…
You do not, under any circumstances, “gotta hand it to javascript”.
Love this quiz btw
Best laugh I’ve had in a while. That is some grade-A jank.
Have you seen https://www.destroyallsoftware.com/talks/wat
Ah, JavaScript…
Luckily the new Temporal API is shaping up.
Ok, I get that the Date API is problematic, but I wouldn’t expect anything meaningfull from
new Date("not a date").getTime()
anyway. Why would you in the first place?It’s mainly horrid, because it means you have to code extremely defensively (or I guess, use a different API).
You can’t rely onnew Date("not a date")
aborting execution of your function by throwing an error. Instead, you have to know that it can produce anInvalid Date
object and check for that. Otherwise a randomNaN
shows up during execution, which is gonna be extremely fun to try to find the source of.I understand that it’s implemented like that partially for historical reasons, partially because it’s often better to display “NaN” rather than nothing, but it’s still the sort of behavior that puts me in a cold sweat, because I should be memorizing all kinds of Best Practices™ before trying to code JavaScript.
You think you’d get an error from the constructor.
Because this is a simplified example? Maybe you create the object in one place (saying something more realistic like “2015” or whatever your inexperience or AI told you to) and use getTime() at a later place where you thought you created it in a correct way.
(saying something more realistic like “2015” or whatever your inexperience or AI told you to)
User input is probably the big one where this API is gonna get stress-tested…
Parsing user input? Nonsense data coming from an API?
If you’re expecting shit data then you’d have unit tests for those cases so you’d know what to expect.
Maybe you don’t expect shit data; you just get it. I know, always expect it…