Modo estricto de JavaScript
- Página anterior Hoisting de JS
- Página siguiente Palabra clave this de JS
"use strict";
Define que el código JavaScript debe ejecutarse en "modo estricto".
Instrucción "use strict"
"use strict"
Es una nueva instrucción en JavaScript 1.8.5 (versión ECMAScript 5).
No es una declaración de una instrucción, sino una expresión literaria, que las versiones anteriores de JavaScript la ignoran.
"use strict";
Su función es indicar que el código JavaScript debe ejecutarse en "modo estricto".
En el modo estricto, no puede, por ejemplo, usar variables no declaradas.
Los siguientes navegadores soportan el modo estricto:
- Versión 10 en adelante de IE
- Versión 4 en adelante de Firefox
- Versión 13 en adelante de Chrome
- Versión 5.1 en adelante de Safari
- Versión 12 en adelante de Opera
Declarar el modo estricto
Añadiendo al principio del script o función: "use strict";
Para declarar el modo estricto.
Declarar el modo estricto al principio del script, con ámbito global (todos los códigos dentro del script se ejecutan en modo estricto):
Ejemplo
"use strict"; x = 3.14; // Esto generará un error, porque x no ha sido declarado
Ejemplo
"use strict"; myFunction(); function myFunction() { y = 3.14; // Esto generará un error, porque y no ha sido declarado }
Declarar el modo estricto dentro de una función, con ámbito local (solo el código dentro de la función se ejecuta en modo estricto):
x = 3.14; // Esto no generará un error myFunction(); function myFunction() { "use strict"; y = 3.14; // Esto generará un error }
"use strict"; sintaxis
La sintaxis del modo estricto se ha diseñado para ser compatible con versiones anteriores de JavaScript.
No tendrá efectos negativos compilar texto numérico en programas JavaScript (por ejemplo, 4+5) o texto de cadena ("Bill Gates"). Solo se compilará como una variable inexistente y luego desaparecerá.
Todo "use strict";
Sólo afecta a los compiladores nuevos que "entienden" su significado.
¿Por qué usar el modo estricto?
El modo estricto nos facilita escribir JavaScript "seguro".
El modo estricto convierte en errores reales lo que antes se aceptaba como "mal gramático".
Por ejemplo, en JavaScript común, escribir mal el nombre de una variable creará una nueva variable global. En el modo estricto, esto lanzará un error, por lo que no es posible crear variables globales de manera accidental.
En JavaScript común, si se asigna a una propiedad no writable, el desarrollador no recibirá ninguna retroalimentación de error.
En el modo estricto, asignar valores a propiedades no writable, solo readable, inexistentes, o a variables o objetos inexistentes, lanzará un error.
Cosas no permitidas en el modo estricto
No se permite usar variables sin declarar:
"use strict"; x = 3.14; // Esto generará un error
El objeto también es una variable
No se permite usar objetos sin declarar:
"use strict"; x = {p1:10, p2:20}; // Esto generará un error
No se permite eliminar variables (o objetos):
"use strict"; var x = 3.14; delete x; // Esto generará un error
No se permite eliminar funciones:
"use strict"; function x(p1, p2) {}; delete x; // Esto generará un error
No se permite el nombre de parámetro repetido:
"use strict"; function x(p1, p1) {}; // Esto generará un error
No se permite texto de número octal:
"use strict"; var x = 010; // Esto generará un error
No se permiten caracteres de escape:
"use strict"; var x = \010; // Esto generará un error
No se permite escribir en propiedades solo de lectura:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // Esto generará un error
No se permite escribir en propiedades solo leíbles:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // Esto generará un error
No se permite eliminar propiedades no eliminables:
"use strict"; delete Object.prototype; // Esto generará un error
La cadena "eval" no puede ser utilizada como variable:
"use strict"; var eval = 3.14; // Esto generará un error
La cadena "arguments" no puede ser utilizada como variable:
"use strict"; var arguments = 3.14; // Esto generará un error
with
No se permite la siguiente declaración:
"use strict"; with (Math){x = cos(2)}; // Esto generará un error
No se permite por razones de seguridad eval()
Crear variables en el ámbito en el que se llama:
"use strict"; eval ("var x = 2"); alert (x); // Esto generará un error
En llamadas a funciones similares a f(), el valor de this es el objeto global. En el modo estricto, ahora se convierte en undefined
.
Garantía para el futuro
No se permite el uso de palabras clave reservadas para el futuro en el modo estricto. Son las siguientes:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // Esto generará un error
Advertencia
"use strict"
Las instrucciones solo pueden estar enInicioReconocido.
- Página anterior Hoisting de JS
- Página siguiente Palabra clave this de JS