Articles

JavaScript Use Strict

Posted on

"use strict"; Define que el código JavaScript debe ejecutarse en «modo estricto».

La directiva «use strict»

La directiva "use strict" fue nueva en la versión 5 de ECMAScript.

No es una declaración, sino una expresión literal, ignorada por versiones anteriores de JavaScript.

El propósito de "use strict" es indicar que el código debe ejecutarse en «modo estricto».

Con el modo estricto, no se pueden, por ejemplo, utilizar variables no declaradas.

Todos los navegadores modernos soportan el «uso estricto» excepto Internet Explorer 9 e inferiores:

«use strict» 13.0 10.0 4.0 6.0 12.1

Los números de la tabla especifican la primera versión del navegador que soporta completamente la directiva.

Puedes utilizar el modo estricto en todos tus programas. Te ayuda a escribir un código más limpio, como evitar que uses variables no declaradas.

"use strict" es sólo una cadena, por lo que IE 9 no lanzará un error aunque no lo entienda.

Declaración del modo estricto

El modo estricto se declara añadiendo «use strict»; al principio de un script o una función.

Declarado al principio de un script, tiene alcance global (todo el código del script se ejecutará en modo estricto):

Ejemplo

«use strict»;
x = 3.14; // Esto causará un error porque x no está declarada

Pruébalo tú mismo »

Ejemplo

«use strict»;
miFunción();
función miFunción() {
y = 3.14; // Esto también causará un error porque y no está declarada
}

Pruébalo tú mismo »

Declarada dentro de una función, tiene alcance local (sólo el código dentro de la función está en modo estricto):

x = 3.14; // Esto no causará un error.
miFunción();
función miFunción() {
«use strict»;
y = 3.14; // Esto causará un error
}

Pruébelo usted mismo »

La sintaxis «use strict»;

La sintaxis, para declarar el modo estricto, fue diseñada para ser compatible con versiones antiguas de JavaScript.

Compilar un literal numérico (4 + 5;) o un literal de cadena («John Doe»;) en un programa JavaScript no tiene efectos secundarios. Simplemente se compila a una variable no existente y muere.

Así que "use strict"; sólo importa a los nuevos compiladores que «entienden» su significado.

¿Por qué el modo estricto?

El modo estricto hace que sea más fácil escribir un JavaScript «seguro».

El modo estricto cambia la «mala sintaxis» previamente aceptada en errores reales.

Como ejemplo, en un JavaScript normal, escribir mal el nombre de una variable crea una nueva variable global. En el modo estricto, esto arrojará un error, haciendo imposible la creación accidental de una variable global.

En JavaScript normal, un desarrollador no recibirá ningún comentario de error al asignar valores a propiedades no escribibles.

En modo estricto, cualquier asignación a una propiedad no escribible, una propiedad de sólo obtención, una propiedad inexistente, una variable inexistente o un objeto inexistente, arrojará un error.

No se permite en modo estricto

Usar una variable, sin declararla, no está permitido:

«use strict»;
x = 3.14; // Esto provocará un error

Prueba tú mismo»

Los objetos también son variables.

Utilizar un objeto, sin declararlo, no está permitido:

«use strict»;
x = {p1:10, p2:20}; // Esto provocará un error

Pruébalo tú mismo «

Borrar una variable (u objeto) no está permitido.

«use strict»;
var x = 3,14;
delete x; // Esto causará un error

Pruébalo tú mismo «

No se permite borrar una función.

«use strict»;
función x(p1, p2) {};
borrar x; // Esto causará un error

Pruébalo tú mismo «

No se permite duplicar el nombre de un parámetro:

«use strict»;
función x(p1, p1) {}; // Esto causará un error

Pruébalo tú mismo «

No se permiten literales numéricos octales:

«use strict»;
var x = 010; // Esto causará un error

Inténtelo usted mismo «

Los caracteres de escape octales no están permitidos:

«use strict»;
var x = «\010»; // Esto causará un error

Inténtelo usted mismo»

No se permite escribir en una propiedad de sólo lectura:

«use strict»;
var obj = {};
Object.defineProperty(obj, «x», {valor:0, escribible:false});
obj.x = 3.14; // Esto provocará un error

Inténtalo tú mismo»

No está permitido escribir en una propiedad de sólo obtención:

«use strict»;
var obj = {get x() {return 0} };
obj.x = 3.14; // Esto causará un error

Inténtalo tú mismo»

Eliminar una propiedad no eliminable no está permitido:

«use strict»;
elimina Object.prototype; // Esto causará un error

Inténtelo usted mismo «

La palabra eval no puede utilizarse como variable:

«use strict»;
var eval = 3.14; // Esto causará un error

Inténtalo tú mismo»

La palabra arguments no puede usarse como variable:

«use strict»;
var arguments = 3.14; // Esto causará un error

Inténtalo tú mismo»

La sentencia with no está permitida:

«use strict»;
with (Math){x = cos(2)}; // Esto causará un error

Pruébalo tú mismo «

Por razones de seguridad, eval() no se permite crear variables en el ámbito desde el que se llamó:

«use strict»;
eval («var x = 2»);
alert (x); // Esto provocará un error

Prueba tú mismo»

La palabra clave this en las funciones se comporta de forma diferente en modo estricto.

La palabra clave this se refiere al objeto que llamó a la función.

Si no se especifica el objeto, las funciones en modo estricto devolverán undefined y las funciones en modo normal devolverán el objeto global (ventana):

«use strict»;
función miFunción() {
alert(this); // alertará «undefined»
}
miFunción();

Pruébalo tú mismo»

¡Prueba de futuro!

Las palabras clave reservadas para futuras versiones de JavaScript NO pueden utilizarse como nombres de variables en modo estricto.

Estas son:

  • Implementos
  • Interfaz
  • Let
  • Paquete
  • Privado
  • Protegido
  • Público
  • Estático
  • Rendimiento
«use strict»;
var public = 1500; // Esto provocará un error

Inténtalo tú mismo»

¡Cuidado!

La directiva «use strict» sólo se reconoce al principio de un script o de una función.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *