En JS no parece posible verificar si un argumento pasado a una función es realmente del tipo 'error' o una instancia de Error.
Por ejemplo, esto no es válido:
typeof err === 'error'
ya que solo hay 6 tipos posibles (en forma de cadenas):
El operador typeof devuelve información de tipo como una cadena. Hay seis valores posibles que typeofdevuelve:
"número", "cadena", "booleano", "objeto", "función" y "indefinido".
Pero qué pasa si tengo un caso de uso simple 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);
}
}
Entonces, ¿cuál es la mejor manera de determinar si un argumento es una instancia de Error?
¿Es el instanceofoperador de alguna ayuda?
err(digamos) un iframe, pero luego lo pasa a la ventana principal para que lo entregue, obtendrá (err instanceof Error) === false. Esto se debe a que el iframe y su ventana principal tienen Errorprototipos de objetos distintos . Del mismo modo, un objeto como obj = {};will, cuando se pasa a una función que se ejecuta en una ventana diferente, yeild (obj instanceof Object)===false. (Incluso peor, en IE, si mantiene una referencia a obj después de que su ventana se destruye o navega, ¡tratar de llamar a los prototipos de objetos como obj.hasOwnProperty()arrojará errores!)
catch((err)=>{if (err === ENOENT)devuelve ENOENT is not definederror?
err instanceof Error