Now, I understand that javascript runs in a completely different kind of environment, and it does have the liberty of making things differently, up to a certain point. But making '' == 0 true may be a bit too far.. And making [1] == 1 true is clearly too far.
define "clean" and name one language in the history of computing that actually fits that definition.
'Evolved' languages tend to be less clean than 'designed' ones, and also any language accumulates cruft with time if features are added carelessly - for example, C++ can never be 'clean' even if C++11 tries to be that way, because compatibility.
Python, go, Haskell are much cleaner than JS. I'm not claiming that those languages are perfect, they definitely aren't, but there is a significant difference - just as in the saying that [earth is flat] is wrong, [earth is a sphere] is wrong, but they're nowhere near equally wrong.
EDIT: removed Java, Rust and Go
> So has Dart. how's dart doing?
Very well. It has a sane type system. Its VM is about twice as fast as V8, has a nice IDE that comes with it.
For another, if you put lua in the browser instead of javascript, how long do you think it will be before lua starts growing horrible warts as well?