Обычно "глупость" JS объясняется тем, что он разработан за 10 дней.
У меня вот тоже сложилось впечатление, что он и на то похож, и на это похож, но ты можешь делать и так, и эдак. На стыке противоположностей, рождается что-то третье.
В целом, и в С# есть лямбда-синтаксис с замыканиями. В принципе тоже можно что-нибудь в функциональном стиле сделать и нужно делать.
Стандартная библиотека слабая и слабая - это туда же ....к "10 дням".
"Массив это объект с целочисленными ключами, тогда как объект это ассоциативный массив" А еще функции - это объект и ней как к объекту можно добавить свойства. По моему, это прекрасно. =)
Неявные преобразования вообще штука очень сомнительная, если бы можно было бы произвольно в языке ее отключать, я бы отключил (я не в курсе....может можно как то...например чтоб статический анализатор пометил как ошибку). Причем и в С# тоже. Было бы чуть более много словно, но зато очень ясно-понятно что тут конкретно происходит.