Quando me deparei com essa técnica, achei que era legal, inteligente e inquebrável.
Claro que a primeira coisa que fiz foi abusar dela:
function isUndefined(arg) {
return Object.prototype.toString.call(arg) === '[object Undefined]';
}
Não tem como estragar tudo certo? Mas então eu executei meus testes de unidade com PhantomJS porque você sabe … integração contínua e todo esse tipo de coisa.
A verdade era bem difícil de engolir: [objeto DOMWindow] .
Em sua cara DOM!
Existem algumas boas explicações por aí, mas eu também poderia simplesmente ter feito isso:
arg === undefined