It is true that JavaScript has its own special brand of insanity, but I have found that most of the issue I run into when writing code in dynamically typed languages are the same across every one I've used. You get a value from somewhere and you have no idea what you can do with it and neither tooling nor documentation tends to be all that helpful. That's not just JavaScript. The same happens to me in Python, PHP, and even Scheme/Racket.
My first negative experience with dynamically typed languages was actually as an undergrad writing some code in some obscure scripting language for event driven simulations. Like most scripting languages, it didn't include variable declarations, so a typo in a variable name that a compiler would have found immediately stole hours of my life. It didn't help that because of the nature of this language, the flow of execution wasn't linear as events could fire off code at somewhat random locations.
Later, as a professor, I was writing some fun code in Scheme that was playing with higher-order functions. I hit a certain point where I was no longer certain what the type of an argument was. It wasn't in my head and the language did nothing to help me figure it out.
It is my experience that these types of issues exist in all dynamically typed languages because the language doesn't statically keep track of most of this information. Sometimes you can get it at runtime, but even that isn't a given.