Indeed it does. Its one of the hardest modern language I have ever tried to teach someone. All the minor trip-wires (like http://stackoverflow.com/questions/1995113/strangest-languag...), but the worst part is that there are always at least 5 ways to do something.
Out of those 5, two is bad and should never be done but you would be lucky if any book mention this fact. Of the three left, only two is ever considered as good through noone can agree which one is the preferred way. One solution ends up being neither hated or praised enough to be worth mentioning in a book or ranting article.
Besides, there are so many great JS libraries now that in most cases, I wouldn't want to switch to Lua in the browser and face re-inventing the wheel (same reason why I generally use Python instead of Lua elsewhere). But its fun to think about.
You can't make such a statement confidently unless you examine the specs of both languages.
For example, Python integers promote to bigints automatically while JS numbers don't. For one more, in Python you can overload attribute access, while in JS you can't. Both of these are language features rather than implementation details, and both potentially affect performance. There are probably others.
I've never thought about that but could make sense.
> as well as its enforced whitespace, which makes it easier to write maintainable code.
This is something I've never understood and where I tend to disagree. When starting with "whitespace" languages like Coffee, Ruby or Python people initially are please with clean and tidy looking code but in the long run this code is not maintainable since all the white space makes the code looking not distinctively enough. In contrast, bracket based languages like C or JS give much better orientation. I can quickly see where code blocks start or I can immediately recognise functions etc.
> Lua, on the other hand, would be an excellent browser language
Where do you get this? The only instance where I see Python becoming unreadable due to whitespace is when a developer abuses whitespace where it's not needed e.g. a = [ 'a', 'list' ]
Another example could be chaining method calls Java-style, but all of this is alleviated by just following PEP8.
The significance of whitespace has no effect on the readability of a language.
> Neither, JS' syntax is bad or ugly.
Languages are more than syntax. The problem is the excess of boilerplate, lack of good APIs and general lack of consistency.
Tell me a language where this is acceptable: https://gist.github.com/4471029
=> Underscore, 4KB in production and gives you _.sortBy and _.difference among other amenities