Por quê JavaScript é do mal?
Uma imagem para explicar tudo, abra o console do seu navegador (F12) e confira...
Isso acontece por causa da inferência de tipos agregada a fraca tipagem. Parece também que, o Javascript quando "não sabe" inferir um tipo para calcular/executar com outro, ele transforma, no caso do Object em String, usando o método toString(), e os demais, ocorre erros com floats e algumas variáveis ou palavras da própria linguagem ele transforma em "1", "0" etc, e calcula... Realmente lamenável.
Solução: usar uma linguagem que compile para o JavaScript, como LiveScript, ClojureScript, Dart, TypeScript, etc...
Estamos em um momento onde há pensamentos de criar um "WebAssembly", espécies de bytecodes (? alguém confirme) que serão lidos em todos os navegadores e então, poderão ser usadas outras linguagens que compilem para projetar os sites e sistemas.