(*) Most of which confuse the DOM with JS, and/or can't grasp why JS is no C nor JAVA: different scoping rules, closures, prototypal inheritance, no classes, asynchronous/evented execution, etc.
We can disagree on the language. I worked with developing Javascripts frontends for several years in the past and I still hate it.
It's really scheme or closure with scheme/closure crossed out and Java written in as a marketing ploy. Until the ECMA standards came in it wasn't really a language at all, it was a collection of hacks each one different in each browser. In part it STILL is. It's just that we have frameworks today that hide this and work around the browser implementation oddities.
There is your error, again: JS is and has always been 100% compatible among browsers, the DOM is what is not.
It's dynamic typing is fairly retarded and sometimes extremely irritating. The scope is bonkers. Everything seems to be a function that takes a function as an argument and returns a function that takes a function as an argument. Recursion and callback-tastic. It's object orientation is just broken.
Dynamic typing is fine, automatic type conversion (casting) not so much, you've got to be careful and know what you're doing or if not avoid it altogether, which is easy to do.
The scope thing is not a problem unless you tend to write too long (in LOCs) procedures (functions), which is not a good idea anyway.
The everything is a function and the callback-tastic thing you mention is done exactly like that in C too when/if your program is event-driven, but, as C has no closures you've got to create tons of structures, or objects in C++, in which to save the context that you've got saved for you for free, in the closures in JS.
Wrt the objects, that's what people coming from classical inheritance repeat ad nauseam, but you know what? More often than not there's no need to classify objects, nor any need to declare classes, and most of the times you don't even need your objects to inherit nothing at all. And there you go: in JS you can simply create them as you like as you need on the fly at runtime (procedurally not declaratively) without any hassles.
As I said before "haters can't grasp why JS is no C nor JAVA: different scoping rules, closures, prototypal inheritance, no classes, asynchronous/evented execution, etc." and you've just now proved my point again.
The only good thing that came out of Javascript was JSON, which thankfully shut the XML fan boys up enough that we managed to get away from slow, verbose, cumbersome DOM structures and immensely inefficient parsing.
Yep, and this is what Dave Winer (of xml fame) had to say about it: "Who did this travesty? Let's find a tree and string them up. Now.". Lol, nobody sane uses xml anymore.