"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
x = 3.14; // Esto causará un error porque x no está declarada
Pruébalo tú mismo »
Ejemplo
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):
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:
x = 3.14; // Esto provocará un error
Prueba tú mismo»
Los objetos también son variables.
Utilizar un objeto, sin declararlo, no está permitido:
x = {p1:10, p2:20}; // Esto provocará un error
Pruébalo tú mismo «
Borrar una variable (u objeto) no está permitido.
var x = 3,14;
delete x; // Esto causará un error
Pruébalo tú mismo «
No se permite borrar una función.
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:
función x(p1, p1) {}; // Esto causará un error
Pruébalo tú mismo «
No se permiten literales numéricos octales:
var x = 010; // Esto causará un error
Inténtelo usted mismo «
Los caracteres de escape octales no están permitidos:
var x = «\010»; // Esto causará un error
Inténtelo usted mismo»
No se permite escribir en una propiedad de sólo lectura:
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:
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:
elimina Object.prototype; // Esto causará un error
Inténtelo usted mismo «
La palabra eval
no puede utilizarse como variable:
var eval = 3.14; // Esto causará un error
Inténtalo tú mismo»
La palabra arguments
no puede usarse como variable:
var arguments = 3.14; // Esto causará un error
Inténtalo tú mismo»
La sentencia with
no está permitida:
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ó:
eval («var x = 2»);
alert (x); // Esto provocará un error
Prueba tú mismo»
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):
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
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.