VISITAS:

sábado, 11 de febrero de 2017

Javascript: use strict

Javascript permite realizar algunos chequeos al código que escribimos. No es que se convierta en un lenguaje con los chequeos de los lenguajes compilados, ni siquiera se aproxima a su primo-hermano typescript, pero con estos chequeos podremos detectar algunos errores de otra forma pasarían inadvertidos y sólo provocarían errores de ejecución. Errores que muchas veces son muy difíciles de detectar.

Modo estricto

Para activar el modo "estricto" de javascript, tenemos que poner en la primera línea del fichero .js lo siguiente:

    "use strict";

Obsérvese que utilizamos comillas, no ponemos directamente use strict. ¿Por qué? Porque de esta forma, un string pasará inadvertido en versiones antiguas de los navegadores. Sin embargo, cuando un navegador moderno, vea este string al comienzo del fichero, activará los chequeos de javascript.
Si se desean activar los chequeos en todo el fichero, entonces "use strict" tiene que ser la primera sentencia del fichero .js Sin embargo, es posible, por ejemplo, colocar la sentencia "use strict" al comienzo de una función, y se aplicarán los chequeos sólo a esa función.

Variables globales

En javascript podemos utilizar una variable en cualquier lugar sin haberla declarado antes. Por ejemplo:

    contador = 1;

Esto funciona, pero no es una práctica recomendable, como sabe muy bien cualquier programador.
Sin embargo, si activamos los chequeos:

    "use strict";
    contador = 1;

Al ejecutar este código, obtendremos un error de javascript: "contador is not defined" indicando que la variable contador no ha sido definida anteriormente. La forma correcta sería:

    "use strict";
    var contador;
    contador = 1;

Variables mal escritas

Otro error típico en javascript es escribir mal el nombre de una variable:

    var contador = 0;
    contdor = 1
    console.log(contador);

Por un error tecleando, hemos asignado el valor 1 a una variable que no es contador, lo cual está permitido en javascript, y la consola nos mostrará el valor cero, en lugar de 1, que es lo que esperábamos. No tendremos ninguna otra pista de que estemos haciendo algo mal, simplemente obtendremos el valor cero en la consola.
Si activamos el modo estricto, tendremos el aviso que nos llevará al error:

    "use strict";
    var contador = 0;
    contdor = 1
    console.log(contador);
Al ejecutar nos mostrará el mensaje: "contdor is not defined"

Palabras reservadas

Otro error común en javascript es el uso de palabras reservadas como nombres de variables:

    var let = 4;

Esta línea se ejecutaría correctamente en javascript. Sin embargo, si activamos el modo estricto, obtendremos un error:

    "use strict";
    var let = 4;

"reserved word"

eval

Los programadores javascript saben que no es recomendable utilizar la función eval() por los peligros que implica. Sobre todo, porque puede cambiar el contexto del código javascript que le rodea.

Por ejemplo:

    var a = 1;
    eval("var a = 12");
    console.log(a)

En la consola veremos un 12, en lugar de 1 que es el valor que esperamos. O sea, eval() ha creado una variable en nuestro código y ha "machacado" la que ya teníamos.
En modo estricto, lo que se ejecute con eval() no tiene consecuencias en el código que le rodea:

    "use strict";
    var a = 1;
    eval("var a = 12");
    console.log(a)

En este caso, la salida es 1, y el código dentro de eval() se ejecuta autónomamente sin efectos laterales con nuestro código.