Crazy scoping rules? Crazy conversion rules? 8 character lambda keyword? Crappy numeric type? It's safe to say it sucks. It's understandable, given the 10 day timeframe it was created in plus the constraint of needing to be "like" Java for cachet. It's less understandable how so many have doubled down on it.
And even new APIs suck. Look at the silliness npm encourages people to do.
At least the scoping and verbose lambda problem have been solved in ES6, with the introduction of let-vars and fat arrow functions, respectively.
Yeah, I'm having a blast with p5js, which is basically JavaScript and a lot of built-in functions to make it easy to work with a canvas.