Em JS, não parece possível verificar se um argumento transmitido para uma função é realmente do tipo 'error' ou uma instância de Error.
Por exemplo, isso não é válido:
typeof err === 'error'
pois existem apenas 6 tipos possíveis (na forma de cadeias):
O operador typeof retorna informações de tipo como uma sequência. Existem seis valores possíveis que typeofretornam:
"number", "string", "boolean", "object", "function" e "undefined".
Mas e se eu tiver um caso de uso simples como este:
function errorHandler(err) {
if (typeof err === 'error') {
throw err;
}
else {
console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
}
}
então, qual é a melhor maneira de determinar se um argumento é uma instância de Error?
é o instanceofoperador de alguma ajuda?
err(digamos) um iframe, mas depois o passa para a janela principal para entrega, você receberá (err instanceof Error) === false. Isso ocorre porque o iframe e sua janela pai têm Errorprotótipos de objetos distintos e diferentes . Da mesma forma, um objeto como obj = {};vontade, quando passado para uma função executando em uma janela diferente, também será (obj instanceof Object)===false. (Mesmo pior, no IE, se você manter uma referência para obj após a sua janela é destruída ou navegado, tentando chamar FNS objeto de protótipo como obj.hasOwnProperty()irá lançar erros!)
catch((err)=>{if (err === ENOENT)retorna ENOENT is not definederro?
err instanceof Error