lanzar
y intentar... atrapar...finalmente
La declaración try
define un bloque de código para ejecutar (para probar).
La instrucción catch
define un bloque de código para manejar cualquier error.
La declaración finally
define un bloque de código para ejecutar independientemente del resultado.
La declaración throw
define un error personalizado.
Al ejecutar código JavaScript, pueden aparecer diferentes errores. ocurrir.
Los errores pueden ser errores de codificación cometidos por el programador, errores debidos a errores entradas y otras cosas imprevisibles.
En este ejemplo, escribimos mal "alerta" como "adddlert" para producir un error deliberadamente:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Error Handling</h2>
<p>How to use <b>catch</b> to display an error.</p>
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
</body>
</html>
JavaScript detecta adddlert como un error y ejecuta el código de captura para manejarlo.
try
...catch
La instrucción try
le permite definir un bloque de código que se Se prueba en busca de errores mientras se ejecuta.
La instrucción catch
le permite definir un bloque de código para ejecutarse si se produce un error en el bloque try.
Las declaraciones de JavaScript try
y catch
vienen en parejas:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
Cuando ocurre un error, JavaScript normalmente se detiene y genera un mensaje de error.
El término técnico para esto es: JavaScript lanzará un excepción (arroja un error).
JavaScript realmente creará un objeto de error con dos propiedades: nombre y mensaje.
throw
La instrucción throw
le permite crear un error personalizado.
Técnicamente puedes lanzar una excepción (lanzar un error).
La excepción puede ser una Cadena
de JavaScript, un Número
, un Booleano
o un Objeto
:
throw "Too big"; // throw a text
throw 500; // throw a number
Si usa throw
junto con try
y catch
, puedes controlar el programa fluir y generar mensajes de error personalizados.
Este ejemplo examina la entrada. Si el valor es incorrecto, se lanza una excepción (err).
La excepción (err) es detectada por la declaración catch y se muestra un mensaje de error personalizado:
<!DOCTYPE html>
<html>
<body>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button"
onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw
"too low";
if(x > 10) throw "too high";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
</script>
</body>
</html>
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript try catch</h2>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw "too low";
if(x > 10) throw "too high";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
</script>
</body>
</html>
El código anterior es sólo un ejemplo.
Los navegadores modernos suelen utilizar una combinación de JavaScript y HTML integrado. validación, utilizando reglas de validación predefinidas definidas en atributos HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Puede leer más sobre la validación de formularios en un capítulo posterior de este tutorial.
finally
La instrucción finally
le permite ejecutar código, después de intentarlo y captura, independientemente del resultado:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
finally {
Block of code to be executed regardless of the try / catch result
}
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "is empty";
if(isNaN(x))
throw "is not a number";
x = Number(x);
if(x >
10) throw "is too high";
if(x < 5) throw "is too low";
}
catch(err)
{
message.innerHTML = "Error: " +
err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript try catch</h2>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "is empty";
if(isNaN(x)) throw "is not a number";
x = Number(x);
if(x > 10) throw "is too high";
if(x < 5) throw "is too low";
}
catch(err) {
message.innerHTML = "Input " + err;
}
finally {
document.getElementById("demo").value = "";
}
}
</script>
</body>
</html>
JavaScript tiene un objeto de error integrado que proporciona información de error cuando se produce un error.
El objeto de error proporciona dos propiedades útiles: nombre y mensaje.
Establece o devuelve un nombre de error
Establece o devuelve un mensaje de error (una cadena)
La propiedad de nombre de error puede devolver seis valores diferentes:
Ha ocurrido un error en la función eval()
Se ha producido un número "fuera de rango"
Se ha producido una referencia ilegal.
Se ha producido un error de sintaxis.
Se ha producido un error de tipo.
Se ha producido un error en encodeURI()
Los seis valores diferentes se describen a continuación.
Un EvalError
indica un error en la función eval().
Las versiones más recientes de JavaScript no arrojan EvalError. Utilice SyntaxError en su lugar.
Se genera un RangeError
si usa un número que está fuera la gama de valores legales.
Por ejemplo: no puede establecer el número de dígitos significativos de un número en 500.
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot set the number of significant digits of a number to 500:</p>
<p id="demo">
<script>
let num = 1;
try {
num.toPrecision(500);
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Se genera un ReferenceError
si usa (referencia) una variable que no ha sido declarado:
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot use the value of a non-existing variable:</p>
<p id="demo"></p>
<script>
let x = 5;
try {
x = y + 1;
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Se genera un SyntaxError
si intentas evaluar el código con un error de sintaxis.
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot evaluate code that contains a syntax error:</p>
<p id="demo"></p>
<script>
try {
eval("alert('Hello)");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Se genera un TypeError
si utiliza un valor que está fuera del gama de tipos esperados:
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot convert a number to upper case:</p>
<p id="demo"></p>
<script>
let num = 1;
try {
num.toUpperCase();
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Se genera un URIError
si utiliza caracteres ilegales en una función URI:
try {
decodeURI("%%%"); // You cannot URI decode percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>Some characters cannot be decoded with decodeURI():</p>
<p id="demo"></p>
<script>
try {
decodeURI("%%%");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Mozilla y Microsoft definen algunas propiedades de objetos de error no estándar:
fileName (Mozilla) lineNumber (Mozilla) columnNumber (Mozilla) stack (Mozilla) description (Microsoft) number (Microsoft)
No utilice estas propiedades en sitios web públicos. No funcionarán en todos los navegadores.
Para obtener una referencia completa del objeto Error, vaya a nuestro Completo Referencia de errores de JavaScript.