I agree with you on both points.

Flexibility is a common problem too though; whenever you have two ways to accomplish the same task within a language, you really need a best practice supported by somebody to tell people how, when and why to code it. There are two ways to reduce scope – by limiting the commands which are provided by a language, or by formalizing design patterns.

In that sense, JavaScript is painfully flexible. I just skimmed O’Reilly’s book on JS Design Patterns. Not bad, but based on Java design patterns, more or less.