When languages that compile/translate to JavaScript first started becoming popular I rolled my eyes and kept on using JavaScript. Adding a layer of indirection on top of an already high-level language seemed like adding a spork to a picnic basket already stocked with a full set of flatware.
You might be able to make the same argument when comparing C to assembly, and maybe I’m just an old fart yelling at those damn CoffeeScript kids to get off my lawn. Is JavaScript really that bad?
I’ll agree that implicit type conversion is a naught little feature but if you know about it then you should also know how to prevent it. Personally, I think once you actually learn JavaScript and prototype based programming it’s a pretty decent language. And since you have to debug the generated JavaScript and not the higher level language you might as well just learn JavaScript.
But then I started coming across projects like Fay and Emscripten which allow existing languages to be translated to JavaScript. Why is that important? Consider being able to share code from your server-side application (classes, data types, validation) with your front-end code. That’s a pretty cool idea.
Over the holiday break I read an interesting article (which I can’t for the life of me find now) in which the author suggests that we think about JavaScript as very verbose bytecode for a virtual machine built into every web browser. That makes a bit of sense, at least until browsers actually support some sort of universal bytecode interpreter.