Eu sei eu sei. Você deveria estar digitando pato e deixando as coisas explodirem. Ou apenas verificando as coisas específicas que você deseja. E, no entanto, tendo a me pegar fazendo um pouco de verificação de tipos em torno da análise de argumentos.
De qualquer forma, tive algum sucesso com a verificação de tipo usando o pai Object.prototype.toString
em alguns casos especiais. Este é o código que acabei usando em minha biblioteca de análise de argumentos “funs”:
function getType(o) {
var rawTypeString =
Object.prototype.toString.call(o);
var typeString =
rawTypeString.replace('[object ', '')
.replace(']', '')
.toLowerCase();
if (typeString === 'number' && Number.isNaN(o)) {
return 'nan';
}
if (o instanceof Error) {
return 'error';
}
if (typeString.indexOf('html') === 0) {
return 'dom';
}
return typeString;
}
Código completo em uso em: https://github.com/copenhas/funs