My thesis is that Javascript is bad because it was written in 10 days and got way too popular way too fast for Brendan Eich to have the leeway to fix anything with it.
Promises and/or async/await from day 0 would've helped a lot of people not code themselves into "callback hell".
But I really think the features that people consider bad have much more to do with the syntax: Lack of block scoping, lack of const, parseInt("072") === 58, eval, existence of the new() operator [0], semicolon insertion, function hoisting, == vs. ===, with statement.
[0] causes inexperienced devs to think JS is object-oriented when it is not