Autor Tema: JavaScript TypeError: "edad" is read-only use strict y with ejercicio CU01189E  (Leído 2770 veces)

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Hola chicos, pongo mis soluciones al tema CU01189E del tutorial del programador web: JavaScript desde cero.

Ejercicio 1

Código: [Seleccionar]
var persona1 = {};

Object.defineProperty(persona1, "edad", { value: 42, writable: false });

persona1.edad = 19;
Citar
a) Explica paso a paso el significado de este código (busca información en internet si te es preciso).
Se crea un objeto con nombre persona1.
Se define una propiedad del objeto persona1 que es edad y se le atorga el valor de 42.
Se define de nuevo la propiedad edad y ahora su valor es 19.

Citar
b) Crea un pequeño script donde se ejecute este código y se muestre un mensaje por pantalla informando del valor de la edad. Activa la consola para comprobar si aparece algún error.

No aparece ningún error

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>

var persona1 = {};
Object.defineProperty(persona1, "edad", { value: 42, writable: false });
persona1.edad = 19;
console.log(persona1.edad);
alert(persona1.edad);
</script>
</head>
<body>
</body>
</html>


Citar
c) Crea el mismo script pero usando strict mode. Activa la consola y comprueba si aparece algún error. ¿Qué diferencias observas entre la ejecución con strict mode y sin strict mode? ¿Qué explicación le darías a estas diferencias? ¿Crees que sería positivo que este código se escribiera en strict mode o no? ¿Por qué?
El error que sale por consola es:
 'TypeError: "edad" is read-only'
 La diferencia entre usar 'use strict' a no usarla es que que al usar esta sentencia tenemos que usar las tecnicas para escribir Javascript al pie de la letra, escribir código de una forma más estricta y cumpliendo la buenas prácticas de escribir código. En este caso estamos cambiando la propiedad de un objeto dos veces cuando al haberlo definido le hemos indicado writeble:false, por lo que es una propiedad de lectura y lo estamos sobreescribiendo.
 En este código sería bueno usar esta forma de escribir en buenas prácticas Javascrip por lo menos hasta que tuvieramos superado escribir en Javascript sería buena idea escribir código 'use strict', ya que es la manera que escribir código y la consola te avise de que no estas usando 100% de una forma correcta el código.
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<script>
'use strict'; 
   
 var persona1 = {};

Object.defineProperty(persona1, "edad", { value: 42, writable: false });

persona1.edad = 19;
   
console.log(persona1.edad);
   
alert(persona1.edad);
</script>
</head>
<body>
   
</body>
</html>

Ejercicio 2
Citar
Crea y ejecuta un script que use with y que esté:

a) En modo normal. ¿Cuál es el código y cuál es el resultado que obtienes?
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<script>
function decorar(){
 with(document.getElementById('boton').style) {
     
     backgroundColor = 'gainsboro';

    color = 'black';

    width = '200px';

    padding = '20px';

    fontSize = '32px';
     
    textAlign = 'center';
   
    borderRadius = '25px';
     
    border = 'solid thin black';
     
    cursor = 'pointer';
   

}
}

Citar
b) En strict mode. ¿Cuál es el código y cuál es el resultado que obtienes?
Al ejecutar el código con 'use strict' nos dá error. Como se dice en el tema sucede el error porque :
'En JavaScript el uso de with se considera una mala práctica. Los motivos para ello son que puede dar lugar a comportamientos inesperados, problemas de rendimiento y problemas de seguridad.'
« Última modificación: 04 de Abril 2016, 12:57 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Ejercicio 1a bien

1b bien (el código

1c bien ten en cuenta que strict mode no implica necesariamente buenas prácticas, puedes cumplir con strict mode y sin embargo estar usando malas prácticas. strict mode te obliga a cumplir con ciertos requisitos adicionales a los que no obliga el modo normal.


Ejercicio 2: aquí parece que hay algún error al pegar el código, no hace nada y parece que falta código


Saludos!
Responsable de departamento de producción aprenderaprogramar.com

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Perdonad, no sé lo que he hecho con las soluciones del ejercicio 2.
Citar
Crea y ejecuta un script que use with y que esté:

a) En modo normal. ¿Cuál es el código y cuál es el resultado que obtienes?
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<script>
function decorar(){
   // 'use strict';
 
    with (document.getElementById('boton').style) {
     
    backgroundColor = 'gainsboro';

    color = 'black';

    width = '200px';

    padding = '20px';

    fontSize = '32px';
     
    textAlign = 'center';
   
    borderRadius = '25px';
     
    border = 'solid thin black';
     
    cursor = 'pointer';

}
   
}
</script>
</head>
<body>
    <div id='boton'>Hola que tal</div>   
    <p id="pulsador" onclick='decorar()'>Pulse para transformar un boton</p>
   
</body>
</html>

Citar
b) En strict mode. ¿Cuál es el código y cuál es el resultado que obtienes?
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<script>
function decorar(){
   'use strict';
 
    var estilo = (document.getElementById('boton').style) ;
     
    estilo.backgroundColor = 'gainsboro';

    estilo.color = 'black';

    estilo.width = '200px';

    estilo.padding = '20px';

    estilo.fontSize = '32px';
     
    estilo.textAlign = 'center';
   
    estilo.borderRadius = '25px';
     
    estilo.border = 'solid thin black';
     
    estilo.cursor = 'pointer';
 
}
</script>
</head>
<body>
    <div id='boton'>Hola que tal</div>   
    <p id="pulsador" onclick='decorar()'>Pulse para transformar un boton</p>
   
</body>
</html>

En el apartado b, al usar 'use strict' no podemos usar 'with'.

Saludos!!!

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Ahora ok!

Si usamos with con strict obtenemos un mensaje de error en consola del tipo SyntaxError: strict mode code may not contain 'with' statements

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

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