Durante mucho tiempo, JavaScript evolucionó sin problemas de compatibilidad. Se añadían nuevas características al lenguaje mientras que la funcionalidad antigua no cambiaba.
Eso tenía la ventaja de no romper nunca el código existente. Pero la desventaja era que cualquier error o una decisión imperfecta tomada por los creadores de JavaScript quedaba atrapada en el lenguaje para siempre.
Esto fue así hasta 2009, cuando apareció ECMAScript 5 (ES5). Añadió nuevas características al lenguaje y modificó algunas de las existentes. Para que el código antiguo siga funcionando, la mayoría de estas modificaciones están desactivadas por defecto. Es necesario habilitarlas explícitamente con una directiva especial: "use strict"
.
«use strict»
La directiva parece una cadena: "use strict"
o 'use strict'
. Cuando se encuentra en la parte superior de un script, todo el script funciona de forma «moderna».
Por ejemplo:
"use strict";// this code works the modern way...
Muy pronto vamos a aprender funciones (una forma de agrupar comandos), así que notemos de antemano que "use strict"
se puede poner al principio de una función. Haciendo eso se habilita el modo estricto sólo en esa función. Pero normalmente la gente lo usa para todo el script.
"use strict"
está en la parte superior de tus scripts, de lo contrario el modo estricto puede no estar habilitado.
El modo estricto no está habilitado aquí:
alert("some code");// "use strict" below is ignored--it must be at the top"use strict";// strict mode is not activated
"use strict"
. use strict
"no use strict"
que revierta el motor al comportamiento antiguo.
Una vez que entramos en modo estricto, no hay vuelta atrás.
Consola del navegador
Cuando usas una consola de desarrollador para ejecutar código, ten en cuenta que no use strict
por defecto.
A veces, cuando use strict
hace la diferencia, obtendrás resultados incorrectos.
Entonces, ¿cómo hacer realmente use strict
en la consola?
Primero, puedes probar a pulsar Shift+Enter para introducir varias líneas, y poner use strict
encima, así:
'use strict'; <Shift+Enter for a newline>// ...your code<Enter to run>
Funciona en la mayoría de los navegadores, concretamente en Firefox y Chrome.
Si no lo hace, por ejemplo, en un navegador antiguo, hay una forma fea, pero fiable de asegurar use strict
. Ponerlo dentro de esta especie de wrapper:
(function() { 'use strict'; // ...your code here...})()
¿Deberíamos «usar strict»?
La pregunta puede parecer obvia, pero no lo es.
Se podría recomendar empezar los scripts con "use strict"
… Pero ¿sabes lo que mola?
El JavaScript moderno soporta «clases» y «módulos» – estructuras avanzadas del lenguaje (seguramente llegaremos a ellas), que permiten use strict
automáticamente. Así que no necesitamos añadir la directiva "use strict"
, si los usamos.
Así que, por ahora "use strict";
es un invitado bienvenido en la parte superior de tus scripts. Más adelante, cuando tu código esté todo en clases y módulos, podrás omitirlo.
Por ahora, tenemos que conocer el use strict
en general.
En los próximos capítulos, a medida que aprendamos las características del lenguaje, veremos las diferencias entre el modo estricto y el antiguo. Por suerte, no son muchas y en realidad nos hacen la vida mejor.
Todos los ejemplos de este tutorial asumen el modo estricto a menos que (muy raramente) se especifique lo contrario.