"
use strict
"; Define que el código JavaScript debe ejecutarse en "modo estricto".
La directiva de "uso estricto”
La directiva "uso estricto" 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 "uso estricto" es indicar que el código debe ejecutarse en "modo estricto".
Con el modo estricto, no puede, por ejemplo, utilizar variables no declaradas.
Todos los navegadores modernos admiten el "uso estricto", excepto Internet Explorer 9 y versiones anteriores:
Directiva | Chrome | Edge | Firefox | Safari | Opera |
"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 utilizar el modo estricto en todos sus programas. Le ayuda a escribir código más limpio, como evitar el uso de variables no declaradas.
"use strict"
es solo una cadena, por lo que IE 9 no generará un error incluso si no lo comprende.
Declarar modo estricto
El modo estricto se declara agregando "use strict";
al comienzo de un script o una función.
Declarado al comienzo 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á declarado
Ejemplo:
"use strict";
myFunction();
function myFunction() {
y = 3.14; // Esto también causará un error porque y no está declarado
}
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; // Esto no causará un error
myFunction();
function myFunction() {
"use strict";
y = 3.14; // Esto causará un error
}
El "uso estricto"; Sintaxis
La sintaxis para declarar el modo estricto fue diseñada para ser compatible con versiones anteriores 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 en una variable no existente y muere.
Entonces "use strict";
sólo les importa a los nuevos compiladores que "entienden" su significado.
¿Por qué el modo estricto?
El modo estricto facilita la escritura de JavaScript "seguro".
El modo estricto convierte la "mala sintaxis" previamente aceptada en errores reales.
Por 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 hará imposible crear accidentalmente 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 arrojará un error.
No permitido en modo estricto
No se permite utilizar una variable sin declararla:
"use strict";
x = 3.14; // Esto causará un error
Los objetos también son variables.
No está permitido utilizar un objeto, sin declararlo:
"use strict";
x = {p1:10, p2:20}; // Esto causará un error
No se permite eliminar una variable (u objeto).
"use strict";
let x = 3.14;
delete x; // Esto causará un error
No se permite eliminar una función.
"use strict";
function x(p1, p2) {};
delete x; // Esto causará un error
No se permite duplicar el nombre de un parámetro:
"use strict";
function x(p1, p1) {}; // Esto causará un error
No se permiten literales numéricos octales:
"use strict";
let x = 010; // This will cause an error
No se permiten caracteres de escape octal:
"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 no eliminable:
"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
La declaración with
no está permitida:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Por razones de seguridad, eval()
no puede crear variables en el ámbito desde el que se llamó.
En modo estricto, una variable no se puede utilizar antes de declararla:
"use strict";
eval ("x = 2");
alert (x); // This will cause an error
En modo estricto, eval()
no puede declarar una variable usando la palabra clave var:
"use strict";
eval ("var x = 2");
alert (x); // This will cause an error
*eval()
no puede declarar una variable usando la palabra clave let
:*
eval ("let x = 2");
alert (x); // This will cause an error
La palabra clave this
en funciones se comporta de manera 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";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Prueba para el futuro
Las palabras clave reservadas para futuras versiones de JavaScript NO se pueden utilizar como nombres de variables en modo estricto.
Estos son:
implements
interface
let
package
private
protected
public
static
yield
Ejemplo:
"use strict";
let public = 1500; // This will cause an error
Cuidado
La directiva "use strict
" sólo se reconoce al comienzo de un script o función.
W3Schools es el sitio de desarrolladores web más grande del mundo.