One of the mistakes in the language is semicolon[e102] insertion. This is a technique for making semicolons optional as statement terminators. It is reasonable[e103] for IDEs and shell programs to do semicolon insertion. It is not reasonable for the language definition to require[e104] compilers to do it. Use semicolons.
Reserved Words
JavaScript is very heavy handed[e105] in its restrictions[e106] on reserved words. The reserved words are
abstract boolean break byte case catch char class const continue debugger default delete do double else enum export extends false final finally float for function goto if implements import in instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var volatile void while with
Most of those words are not even used in the language. A reserved word cannot be used
1. As a name in literal object notation
2. As a member name in dot notation
3. As a function argument
4. As a var
5. As an unqualified global variable
6. As a statement label
There is no excuse[e107] for the first two restrictions. None. There is an excuse for the second two restrictions, but it is very weak[e108] .