Question: why is the way to determine null considered "very bad"? It works and seems like a valid way, since both empty objects and arrays are truthy, null is the only falsy "object" type.
I think it's only bad because it would break with future changes to typeof. Of course I may be completely wrong on that.
This works just as well and is more future proof though:
function isNull(x) { return x === null }
At which point you don't really need a function at all. Perhaps the version using typeof is from a time when there was no === operator. Was that pre-ES3? I think so but am not certain.
"I think it's only bad because it would break with future changes to typeof"
You're completely right.
The proposal (http://wiki.ecmascript.org/doku.php?id=proposals:typeof) suggests the change of typeof null to actually return "null"; however, as Douglas Crockford points out, "existing code cannot anticipate the change". Additionally, Brendan Eich states that "neither this proposal nor the bug fixes in that proposal are backward-compatible".
This works just as well and is more future proof though:
At which point you don't really need a function at all. Perhaps the version using typeof is from a time when there was no === operator. Was that pre-ES3? I think so but am not certain.