Autor Tema: Gestión de excepciones JavaScript Error, try, catch throw new Error CU01187E  (Leído 2898 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes. Hago entrega de una posible solución del ejercicio CU01187E del curso JavaScript desde cero.

Citar
EJERCICIO

Un programador ha desarrollado un código y nos han pedido que lo revisemos. Escribe este código en un editor, ejecútalo y responde a las siguientes preguntas:

Código: [Seleccionar]
<html> <head><meta charset="utf-8"><style type="text/css"> input {margin:10px;} </style>

<script>

function validarPassword(password){

  try  {

    if(password.length < 5 ) {      throw "SHORT";    }else if(password.length > 10 ) {  throw "LONG";    }

    alert("Password Validated!");

  } catch(e) {

    if(e == "SHORT"){  alert("Not enough characters in password!"); }

    else if(e == "LONG"){ alert("Password contains too many characters!");   }

  }finally{    document.miFormulario.password.value="";   }

  alert("La revisión ha terminado.");

}

 </script>

    </head>

    <body>

        <form name="miFormulario" onsubmit="validarPassword(document.getElementById('pass').value)" action="#" >

            Nombre de usuario: <input type="text" name="campo1"><br>

            Password: <input id="pass" type="password" name="password"><br>

            <input type="submit" value="Comprobar" name="comprobar">

        </form>

    </body>
</html>

Citar
a) Busca información en internet y respode: ¿Qué significado tiene una instrucción como throw "SHORT";? ¿A qué da lugar? ¿Qué diferencia hay entre throw "SHORT" y throw new Error('SHORT')?

Mediante la instrucción: "throw "SHORT"" estamos lanzando una cadena de texto "SHORT". Con la instrucción: "throw new Error("SHORT")" creamos un Object Error con un parámetro personalizado "SHORT".

Citar
En los errores que lanzamos nosotros con new Error las propiedades del objeto pueden ser establecidas por nosotros, ...

Citar
b) ¿Cuál es el objetivo que parecía pretender cumplir el autor del código?

Comprobar si la contraseña tenía entre 5 y 10 dígitos. En caso contrario se lanzará un error con sus respectivos mensajes de alerta.

Citar
c) ¿En qué casos se ejecuta la cláusula finally incluida en el código?

Citar
Las sentencias incluidas dentro de una cláusula finally se ejecutarán independientemente de que se haya producido un error o no durante la ejecución del bloque try.

Es decir, se ejecutará siempre la cláusula finally.

Gracias
« Última modificación: 03 de Mayo 2016, 17:25 por César Krall »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01187E Error, try, catch en JavaScript
« Respuesta #1 en: 29 de Abril 2016, 12:56 »
Si decidimos comprobar la variable capturada "e", en el caso de que sea un objeto de tipo Error, tenemos que hacerlo de la siguiente manera:

Código: [Seleccionar]
function validarPassword(password){
    try {
    if(password.length < 5 ){     
    throw new Error('SHORT');   
    }else if(password.length > 10 ){ 
    throw "LONG";   
    }
    alert("Password Validated!");
  }
  catch(e){
    if(e.message == "SHORT"){ 
    alert("No hay suficientes caracteres de la contraseña !");
    }else if(e == "LONG"){
alert("Contraseña contiene demasiados caracteres !");   
}
}
finally{document.miFormulario.password.value='';}
  alert("La revisión ha terminado.");
}

Si dejaramos el código así:

Código: [Seleccionar]
function validarPassword(password){
    try {
    if(password.length < 5 ){     
    throw new Error('SHORT');   
    }else if(password.length > 10 ){ 
    throw "LONG";   
    }
    alert("Password Validated!");
  }
  catch(e){
    if(e == "SHORT"){ 
    alert("No hay suficientes caracteres de la contraseña !");
    }else if(e == "LONG"){
alert("Contraseña contiene demasiados caracteres !");   
}
}
finally{document.miFormulario.password.value='';}
  alert("La revisión ha terminado.");
}

No funcionaría, porque la variable "e" ya no es un cadena de texto, sino un objeto y para que se compare un valor de una propiedad de objeto siempre te tiene que invocar dicha propiedad (concatenando con el objeto).

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU01187E Error, try, catch en JavaScript
« Respuesta #2 en: 01 de Mayo 2016, 13:00 »
Hola dimiste.

Veo todas tus respuestas bien.

En cuanto a la aclaración que hiciste esta muy bien, si lanzamos un objeto tipo Error, luego tendremos que acceder a su propiedad 'message' para poder acceder al mensaje de error.

Saludos. ;D

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01187E Error, try, catch en JavaScript
« Respuesta #3 en: 02 de Mayo 2016, 13:24 »
Buenas, Pedro.

Gracias por corregir otro ejercicio más. Sí, a veces, cuando observo algo interesante en algún código intento comentarlo por si otro usuario (programador aprendíz) se haya encontrado con el mismo misterio.

Saludos :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".