--- title: Error slug: Web/JavaScript/Reference/Global_Objects/Error tags: - Error - JavaScript translation_of: Web/JavaScript/Reference/Global_Objects/Error original_slug: Web/JavaScript/Referencia/Objetos_globales/Error ---
Los objetos Error
se lanzan cuando ocurren errores en tiempo de ejecución. También puedes utilizar el objeto Error
como objeto base para excepciones definidas por el usuario. Ve más adelante los tipos de errores estándar integrados.
Los errores en tiempo de ejecución dan como resultado la creación y lanzamiento de nuevos objetos Error
.
Error
Además del constructor genérico Error
, hay otros siete constructores de errores en el núcleo de JavaScript. Para conocer las excepciones de lado del cliente, consulta {{JSxRef("../Guide/Control_de_flujo_y_manejo_de_errores", "Declaraciones para el manejo de excepciones", "#Sentencias_de_manejo_de_excepciones", 1)}}.
Error
.Error
.Normalmente, creas un objeto Error
con la intención de generarlo utilizando la palabra clave {{JSxRef("Sentencias/throw", "throw")}}. Puedes manejar el error usando la construcción {{JSxRef("Sentencias/try...catch", "try...catch")}}:
try { throw new Error('¡Ups!') } catch (e) { console.error(e.name + ': ' + e.message) }
Puede elegir manejar solo tipos de error específicos probando el tipo de error con la propiedad {{JSxRef("Object.prototype.constructor", "constructor")}} del error o, si estás escribiendo para motores JavaScript modernos, la palabra clave {{JSxRef("Operators/instanceof", "instanceof")}}:
try { foo.bar() } catch (e) { if (e instanceof EvalError) { console.error(e.name + ': ' + e.message) } else if (e instanceof RangeError) { console.error(e.name + ': ' + e.message) } // ... etc }
Error
personalizadosPosiblemente desees definir tus propios tipos de error derivados de Error
para poder lanzarlo con throw new MyError()
y usar instanceof MyError
para verificar el tipo de error en el controlador de excepciones. Esto da como resultado un código de manejo de errores más limpio y consistente.
Consulta "¿Cuál es una buena manera de extender Error
en JavaScript?" en StackOverflow para una discusión en profundidad.
Error
personalizado en ES6Las versiones de Babel anteriores a la 7 pueden manejar métodos de clase CustomError
, pero solo cuando se declaran con {{JSxRef("Objetos_globales/Object/defineProperty", "Object.defineProperty()")}}. De lo contrario, las versiones antiguas de Babel y otros transpiladores no manejarán correctamente el siguiente código sin configuración adicional.
Algunos navegadores incluyen el constructor CustomError
en el seguimiento de la pila cuando se utilizan clases de ES2015.
class CustomError extends Error { constructor(foo = 'bar', ...params) { // Pasa los argumentos restantes (incluidos los específicos del proveedor) al constructor padre super(...params) // Mantiene un seguimiento adecuado de la pila para el lugar donde se lanzó nuestro error (solo disponible en V8) if (Error.captureStackTrace) { Error.captureStackTrace(this, CustomError) } this.name = 'CustomError' // Información de depuración personalizada this.foo = foo this.date = new Date() } } try { throw new CustomError('baz', 'bazMessage') } catch(e) { console.error(e.name) // CustomError console.error(e.foo) // baz console.error(e.message) // bazMessage console.error(e.stack) // stacktrace }
Error
personalizado ES5Todos los navegadores incluyen el constructor CustomError
en el seguimiento de la pila cuando se usa una declaración de prototipo.
function CustomError(foo, message, fileName, lineNumber) { var instance = new Error(message, fileName, lineNumber); instance.name = 'CustomError'; instance.foo = foo; Object.setPrototypeOf(instance, Object.getPrototypeOf(this)); if (Error.captureStackTrace) { Error.captureStackTrace(instance, CustomError); } return instance; } CustomError.prototype = Object.create(Error.prototype, { constructor: { value: Error, enumerable: false, writable: true, configurable: true } }); if (Object.setPrototypeOf){ Object.setPrototypeOf(CustomError, Error); } else { CustomError.__proto__ = Error; } try { throw new CustomError('baz', 'bazMessage'); } catch(e){ console.error(e.name); // CustomError console.error(e.foo); // baz console.error(e.message); // bazMessage }
Especificación |
---|
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}} |
{{Compat("javascript.builtins.Error")}}