Modo estricto de JavaScript

"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

Prueba personalmente

Ejemplo

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // Esto generará un error, porque y no ha sido declarado
}

Prueba personalmente

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
}

Prueba personalmente

"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

Prueba personalmente

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

Prueba personalmente

No se permite eliminar variables (o objetos):

"use strict";
var x = 3.14;
delete x;                // Esto generará un error

Prueba personalmente

No se permite eliminar funciones:

"use strict";
function x(p1, p2) {}; 
delete x;                 // Esto generará un error

Prueba personalmente

No se permite el nombre de parámetro repetido:

"use strict";
function x(p1, p1) {};   // Esto generará un error

Prueba personalmente

No se permite texto de número octal:

"use strict";
var x = 010;             // Esto generará un error

Prueba personalmente

No se permiten caracteres de escape:

"use strict";
var x = \010;            // Esto generará un error

Prueba personalmente

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

Prueba personalmente

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

Prueba personalmente

No se permite eliminar propiedades no eliminables:

"use strict";
delete Object.prototype; // Esto generará un error

Prueba personalmente

La cadena "eval" no puede ser utilizada como variable:

"use strict";
var eval = 3.14;         // Esto generará un error

Prueba personalmente

La cadena "arguments" no puede ser utilizada como variable:

"use strict";
var arguments = 3.14;    // Esto generará un error

Prueba personalmente

with No se permite la siguiente declaración:

"use strict";
with (Math){x = cos(2)}; // Esto generará un error

Prueba personalmente

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

Prueba personalmente

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

Prueba personalmente

Advertencia

"use strict" Las instrucciones solo pueden estar enInicioReconocido.