Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 29 de Abril 2016, 12:48
-
Buenas tardes. Hago entrega de una posible solución del ejercicio CU01187E del curso JavaScript desde cero.
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:
<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>
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".
En los errores que lanzamos nosotros con new Error las propiedades del objeto pueden ser establecidas por nosotros, ...
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.
c) ¿En qué casos se ejecuta la cláusula finally incluida en el código?
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
-
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:
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í:
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).
-
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
-
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 :)