@Riven
How many javascripters know about the crucial ‘===’ operator?
JSLint. 
@kaffiene
It doesn’t have file-scoped variables (It’s all global baby!!).
There should be at most one global variable. Also, Java isn’t file-scoped - it’s block-scoped. JavaScript on the other hand uses function scope. Unfortunately it defaults to the global object, but JSLint will point this out if necessary.
The foreach iterator is borked for arrays […]
Why would you use foreach? It’s too much to type (requires a guarding hasOwnProperty check). Also, do you mean for-in or the new forEach?
[foreach] returns strings, not index numbers […]
For-in gives you the keys. You are supposed to use it to iterate over the properties of some object. Either way yourArray[‘0’] will give you the first item.
if you have extended the array prototype
Don’t modify objects you don’t own.
it returns prototype functions as well as indicies
Hence the hasOwnProperty guarding condition. Again, JSLint points this out.
It was explicitly designed for small tasks and on top of that it runs very slowly compared to Java/C/C++.
Well, it’s faster than Python, Ruby, Lua, etc. So, it’s really not that slow.
An JSLint is a piece of shit. Half the things it reports as errors aren’t
(e.g.: preferring === to == can be wrong depending on input but JSLint
will always recommend the former)
Well, if you write something like if (foo == null) and you aren’t actually looking for null here, but for undefined, then replacing the == with === will break the program. It only worked initially, because those two errors canceled each other out.
If you want to check if some variable is truthy or falsy you should use if (foo) or if (!foo) and similar constructs.
You shouldn’t use == or != ever (and there really is no need to use them), since it won’t be clear what your real intention was.