It's used almost entirely to write async code, and had no good native constructs for async other than cascades of callbacks or non-standard libraries implemented on top of callbacks that are confusing to use.
So it's horrible for its most common use case.
It's type system is also a total joke. Typeof returns a string? Array.isArray()? ===? Just wow.
In general, programming tools get worse as they near the UI layer. It's like a passive aggressive way for programmers to say they hate writing user focused things. At least that's my armchair theory about why UI libraries, the DOM, etc. are so badly designed and hard to use compared with systems software or algorithmic code.