Autor Tema: Por qué se obtiene NaN como resultado Operadores lógicos JavaScript CU01118E  (Leído 2652 veces)

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Buenas tardes,

Vengo a hacer entrega del ejercicio CU01118E del tutorial pdf de programación JavaScript desde ceroen el que se nos pide lo siguiente:

Citar
a) Describe paso a paso lo que hace el código anterior, indicando en qué orden se carga cada cosa (instrucciones HTML, instrucciones CSS, instrucciones JavaScript). Por ejemplo, ¿se carga el html <h2>Operadores de incremento</h2> en el instante en que solicitamos al navegador que muestre la página web? ¿En qué orden se ejecutan los scripts?

b) Introduce errores en los scripts de modo que estos no se ejecuten ¿Qué se visualiza en la página web?

c) Introduce 0 y 0 como números en el ejemplo anterior. ¿Cuántas veces el resultado de las operaciones es NaN? ¿Por qué?

Bueno, el código que se nos pide evaluar es el siguiente:

Código: [Seleccionar]
<html> <head> <title>Curso JavaScript aprenderaprogramar.com</title> <meta charset='utf-8'>

<style type='text/css'>

body {background-color: #FAEBD7; font-family: sans-serif; line-height: 1.3;}

div {border-style: solid; margin: 15px; padding: 10px; float: left;}

</style>

<script type='text/javascript'>

var a = prompt('Introduzca un número entero'); var b = prompt('Introduzca otro número entero');

a = Number(a) //Si no hacemos esto a es un texto y a+b concatena el texto

b = Number(b)

</script>

</head>

<body>

<div> <h2>Operadores de incremento</h2>

<script type='text/javascript'>
var valorInicial_a = a; document.write('Valores iniciales: a = ' + a + ', b = ' + b + '<br/> <br/>');
aumentar = ++a * b; document.write ('Operador ++ (anterior): ++a * b  == ' + aumentar +  '<br/>');

document.write ('(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = valorInicial_a; aumentar = a++ * b;

document.write ('Operador ++ (posterior): a++ * b  == ' + aumentar +  '<br/>');
document.write ('(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = valorInicial_a; //Restablecemos el valor que inicialmente tenía a
disminuir = --a * b; document.write ('Operador -- (anterior): --a * b == ' + disminuir +  '<br/>');

document.write ('(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = valorInicial_a;
disminuir = a-- * b;

document.write ('Operador -- (posterior): a-- * b == ' + disminuir +  '<br/>');
document.write ('(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = valorInicial_a;

</script>

</div>

<div>

<h2>Operadores de asignación compuestos</h2>

<script type='text/javascript'>

document.write('Valores iniciales: a = ' + a + ', b = ' + b + '<br/> <br/>');

inicio = a;

a += b;

document.write ( 'Asignación compuesta de suma: a += b equivale a = a + b<br/>');

document.write ( '(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = inicio; a -= b; document.write ( 'Asignación compuesta de resta: a -= b equivale a = a - b<br/>');

document.write ( '(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = inicio; a *= b;

document.write ( 'Asignación compuesta de multiplicación: a *= b equivale a = a * b<br/>');

document.write ( '(Ahora el valor de a es: ' + a + ')<br/><br/>');

a = inicio; a /= b;
document.write ( 'Asignación compuesta de división: a /= b equivale a = a / b<br/>');
document.write ( '(Ahora el valor de a es: ' + a + ')<br/><br/>');
a = inicio; a %= b;
document.write ( 'Asignación compuesta de módulo: a %= b equivale a = a % b<br/>');
document.write ( '(Ahora el valor de a es: ' + a + ')<br/><br/>');
</script></div> </body> </html>

Agregue pausas (alert) en el inicio de cada Script para comprobar resultados.

A)Describe paso a paso lo que hace el código anterior: Bien, la primera parte de todo en ejecutarse del HTML seria el contenido de las etiquetas head. Primero se establecen los estilos de nuestra pagina web (CSS) y seguidamente nuestro primer script para pedirle valores al usuario entra en acción.

Luego de que acabar con head, sigue la etiqueta body. Automáticamente que entramos aqui, se ejecuta el segundo script (tan rapido que no logro visualizar que se carga primero las etiquetas h2 "Operadores de incremento"...). Al acabar de ejecutarse el segundo script se puede apreciar la primera tabla. Seguidamente continua con la carga del otro div, se inicia el tercer y ultimo script. Y acaba la carga de la pagina.

B)Introduce errores en los scripts de modo que estos no se ejecuten ¿Qué se visualiza en la página web?: El comportamiento es el siguiente... si el compilador detecta un error por ejemplo, en el primer script (contenido en head) automaticamente salta al siguiente script del body y el script del head no se ejecuta. A continuación, si hubiese algún error en el siguiente script, el comportamiento es el mismo. Obviamente, como el primer script toma los valores del usuario, simplemente los siguientes  scripts se ejecutarian normalmente insertando el etiquetado html, solo que con errores de calculo. Si existen errores en los 3 scripts de la pagina, unicamente vamos a visualizar el etiquetado html: los dos divs con sus respectivos encabezados h2.

C)Introduce 0 y 0 como números en el ejemplo anterior. ¿Cuántas veces el resultado de las operaciones es NaN? ¿Por qué?: Podemos ver que el valor NaN únicamente aparecería en las operaciones que tengan que ver con división (2 veces). Esto tiene su explicación gracias a la clase de matemática en la escuela: cualquier valor dividido entre 0 nos daría como resultado "infinito", un número que no es real... muchisimo mayor a los valores que normalmente manejamos nosotros. Es por ello que JavaScript automáticamente asigna valores NaN en las respuestas de cada operación.

Salu2!
« Última modificación: 01 de Julio 2018, 17:25 por Alex Rodríguez »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, respuestas correctas. En la respuesta a la opción b) añadiría lo siguiente: si existen dependencias entre scripts y uno depende de otro que falla, posiblemente salten dos errores (el que generó el error inicial y el que tenía dependencia del otro), no llegando a ejecutarse ninguno de ellos. Así podría ocurrir que se encadene una secuencia de errores debido a dependencias entre scripts.

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".