Verificação de tipo de JavaScript

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.toStringem 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