Uso estricto de JavaScript
"use strict";
Define que el código JavaScript debe ejecutarse en "modo estricto".
La Directiva de "uso estricto"
La "use strict"
directiva era nueva en ECMAScript versión 5.
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 puede, por ejemplo, usar variables no declaradas.
Todos los navegadores modernos admiten el "uso estricto", excepto Internet Explorer 9 y versiones anteriores:
Directive | |||||
---|---|---|---|---|---|
"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 es totalmente compatible con la directiva.
Puede usar el modo estricto en todos sus programas. Le ayuda a escribir un código más limpio, como evitar que use variables no declaradas.
"use strict"
es solo una cadena, por lo que IE 9 no arrojará un error incluso si no lo entiende.
Declaración de modo estricto
El modo estricto se declara agregando "uso estricto"; al comienzo de un script o una función.
Declarado al comienzo de una secuencia de comandos, tiene un alcance global (todo el código de la secuencia de comandos se ejecutará en modo estricto):
Ejemplo
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Ejemplo
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Declarado dentro de una función, tiene alcance local (solo el código dentro de la función está en modo estricto):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
El "uso estricto"; Sintaxis
La sintaxis, para declarar el modo estricto, fue diseñada para ser compatible con versiones anteriores de JavaScript.
La compilación de un literal numérico (4 + 5;) o un literal de cadena ("John Doe";) en un programa de JavaScript no tiene efectos secundarios. Simplemente compila a una variable no existente y muere.
Entonces "use strict";
solo importa a los nuevos compiladores que "entienden" el significado de esto.
¿Por qué modo estricto?
El modo estricto facilita la escritura de JavaScript "seguro".
El modo estricto cambia la "mala sintaxis" previamente aceptada en errores reales.
Como ejemplo, en JavaScript normal, escribir mal el nombre de una variable crea una nueva variable global. En modo estricto, esto generará un error, lo que imposibilitará 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 que no se pueden escribir.
En modo estricto, cualquier asignación a una propiedad que no se puede escribir, una propiedad de solo captador, una propiedad inexistente, una variable inexistente o un objeto inexistente generará un error.
No permitido en modo estricto
No se permite usar una variable sin declararla:
"use strict";
x = 3.14; // This will cause an error
Los objetos también son variables.
No se permite usar un objeto sin declararlo:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
No se permite eliminar una variable (u objeto).
"use strict";
let x = 3.14;
delete x; // This
will cause an error
No se permite eliminar una función.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
No se permite duplicar el nombre de un parámetro:
"use strict";
function x(p1, p1) {}; // This will cause an error
Los literales numéricos octales no están permitidos:
"use strict";
let x = 010; // This
will cause an error
No se permiten caracteres de escape octales:
"use strict";
let x = "\010"; // This will cause an error
No se permite escribir en una propiedad de solo lectura:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
No se permite escribir en una propiedad de solo obtención:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
No se permite eliminar una propiedad imborrable:
"use strict";
delete Object.prototype; // This will cause an error
La palabra eval
no se puede utilizar como variable:
"use strict";
let eval = 3.14; // This will cause an error
La palabra arguments
no se puede utilizar como variable:
"use strict";
let arguments = 3.14; // This will cause an error
No with
se permite la declaración:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Por razones de seguridad, eval()
no se permite crear variables en el ámbito desde el que se llamó:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
La this
palabra clave en funciones se comporta de manera diferente en modo estricto.
La this
palabra clave 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";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
¡Prueba del futuro!
Las palabras clave reservadas para futuras versiones de JavaScript NO se pueden usar como nombres de variables en modo estricto.
Estos son:
- implementos
- interfaz
- dejar
- paquete
- privado
- protegido
- público
- estático
- producir
"use strict";
let public = 1500; // This will cause an error
¡Cuidado!
La directiva de "uso estricto" solo se reconoce al comienzo de un script o una función.