[edit spelling]
I think that the reason you find so much negativity regarding javascript is that many people come to javascript from some other language which offers features which javascript doesn't yet offer.
Having cut their teeth on a language tends to leave the programmer with a worldview where any language which doesn't have the same features which are present in their beloved language is an inferior language.
I believe Paul Graham refers to this as 'The Blub Paradox'[0].
Most of the complaints surrounding javascript stem from the fact that it was initially designed to be a lightweight scripting language.
At the time that javascript was created I think that very few people envisioned the web growing into what it has become. Javascript wasn't created with 100,000 line programs in mind.
Therefore it is currently missing some abstractions which people creating and maintaining programs in the large have come to rely on such as classes, interfaces and modules.
Also javascript has a very simple standard library which leads to people feeling that they need to reinvent the wheel in most cases.
Finally Javascript has prototypal inheritance as opposed to the more traditional class based inheritance which so many programmers are used to.
Of course many of the things mentioned above have already been solved or are currently being solved.
The ECMAScript standards body is in the process of adding classes and modules. Libraries such as underscore.js are fleshing out the standard library. And tools such as Coffeescript are providing a more class based inheritance model (if that is your thing).
Typescript[1] remedies a lot of things people dislike about Javascript, including the lack of strict typing. I've been using it with Node lately and it has made me do a 180 towards my interest in making Javascript a sever side language for projects.
Thanks for taking the time to make these interesting points.
Nonetheless reading them it just made javascript even more repellent to me.
It looks like a cup of bad tea to which you need to add some corrections and addons in the first place to taste at least as decent as the other teas.
But still it's generally preferred to much better alternatives because it comes with this kind of unique (not true anymore) feature of non-blocking IO.
What some programmers don't realize in this, is that this inducted preference is just the result larger and larger scale profits needs, influencing the programming world.
If a competitor enterprise which operates in the same market as yours can answer to 10000 more concurrent visits than you do, then you are out of the market. Or: Internet marketing rules will tell you that if your visitors are not engaged in your website in about 5 seconds they'll leave.
This is why we are now forced to learn javascript.
And... programmatically speaking, it's really sad.
Nice answer. I've gone from Java->Haskell->Clojure->CoffeeScript. I was never fluent in Haskell->Clojure but I could get around.
But being completely familiar with Java, CoffeeScript/JavaScript feels nice. I really like underscore.js. When googling for why people don't like JavaScript, it seems that CoffeeScript has already fixed all those problems.
To add to your list of common grievances about JS, there is no integer nor bigint datatype, only doubles, so floating-point rounding errors are common and numbers have an upper limit (2^53). Also, the way variable scoping works in the language, is completely insane.
Having cut their teeth on a language tends to leave the programmer with a worldview where any language which doesn't have the same features which are present in their beloved language is an inferior language.
I believe Paul Graham refers to this as 'The Blub Paradox'[0].
Most of the complaints surrounding javascript stem from the fact that it was initially designed to be a lightweight scripting language.
At the time that javascript was created I think that very few people envisioned the web growing into what it has become. Javascript wasn't created with 100,000 line programs in mind.
Therefore it is currently missing some abstractions which people creating and maintaining programs in the large have come to rely on such as classes, interfaces and modules.
Also javascript has a very simple standard library which leads to people feeling that they need to reinvent the wheel in most cases.
Finally Javascript has prototypal inheritance as opposed to the more traditional class based inheritance which so many programmers are used to.
Of course many of the things mentioned above have already been solved or are currently being solved.
The ECMAScript standards body is in the process of adding classes and modules. Libraries such as underscore.js are fleshing out the standard library. And tools such as Coffeescript are providing a more class based inheritance model (if that is your thing).
[0] http://www.paulgraham.com/avg.html