Los últimos tutoriales de desarrollo web
 

JavaScript uso estricto


"use strict"; Define que el código JavaScript deba ejecutarse en el "modo estricto".


El "use strict" Directiva

El "use strict" Directiva es nuevo en JavaScript 1.8.5 (ECMAScript version 5) .

No es una declaración, sino una expresión literal, ignorada por las versiones anteriores de JavaScript.

El propósito de "use strict" es para indicar que el código debe ser ejecutado en "modo estricto".

Con el modo estricto, no se puede, por ejemplo, utilizar variables no declaradas.

El modo estricto se apoya en:
Es decir, desde la versión 10. Firefox desde la versión 4.
Chrome desde la versión 13. Safari desde la versión 5.1.
Opera desde la versión 12.


Declarando Modo estricto

El modo estricto se declara mediante la adición de "use strict"; al comienzo de una secuencia de comandos o una función.

Declarado al comienzo de una secuencia de comandos, que tiene un alcance global (todo el código en el script se ejecutará en modo estricto):

Ejemplo

"use strict";
x = 3.14;       // This will cause an error (x is not defined)
Inténtalo tú mismo "

Ejemplo

"use strict";
myFunction();

function myFunction() {
    y = 3.14;   // This will also cause an error (y is not defined)
}
Inténtalo tú mismo "

Declarada dentro de una función, que tiene alcance local (sólo el código dentro de la función es 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 (y is not defined)
}
Inténtalo tú mismo "

El "use strict"; Sintaxis

La sintaxis, por la que se declara el modo estricto, fue diseñado para ser compatible con versiones anteriores de JavaScript.

Compilación de un literal numérico (4 + 5;) o una cadena literal ("John Doe";) en un programa JavaScript no tiene efectos secundarios. Simplemente se compila a una variable inexistente y muere.

Así que "use strict" ; Sólo importa a los nuevos compiladores que "comprender" el significado de la misma.


¿Por qué modo estricto?

El modo estricto hace que sea más fácil de escribir "segura" JavaScript.

cambios en el modo estricto aceptadas previamente "mala sintaxis" en errores reales.

A modo de ejemplo, en JavaScript normales, escribir mal un nombre de variable crea una nueva variable global. En modo estricto, esto generará un error, por lo que es imposible crear accidentalmente una variable global.

En JavaScript normales, un desarrollador no recibirá ninguna notificación de errores asignación de valores a las propiedades no modificables.

En modo estricto, cualquier asignación a una propiedad no escrito, una propiedad de sólo captador, un no-existente propiedad, una variable que no existe, o un objeto que no existe, se generará un error.


No se permite en modo estricto

El uso de una variable, sin declararlo, no está permitido:

"use strict";
x = 3.14;                // This will cause an error (x is not defined)

Inténtalo tú mismo "

Los objetos son variables también.

El uso de un objeto, sin declararlo, no está permitido:

"use strict";
x = {p1:10, p2:20};      // This will cause an error (x is not defined)

Inténtalo tú mismo "

No se permite borrar una variable (u objeto).

"use strict";
var x = 3.14;
delete x;                // This will cause an error

Inténtalo tú mismo "

No se permite borrar una función.

"use strict";
function x(p1, p2) {};
delete x;                // This will cause an error 

Inténtalo tú mismo "

No se permite la duplicación de un nombre de parámetro:

"use strict";
function x(p1, p1) {};   // This will cause an error

Inténtalo tú mismo "

Octal literales numéricos no están permitidos:

"use strict";
var x = 010;             // This will cause an error

Inténtalo tú mismo "

Escapar caracteres no están permitidos:

"use strict";
var x = \010;            // This will cause an error

Inténtalo tú mismo "

No se permite la escritura de una propiedad de sólo lectura:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

Inténtalo tú mismo "

No se permite la escritura de una propiedad de sólo get:

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

Inténtalo tú mismo "

No se permite borrar una propiedad imborrable:

"use strict";
delete Object.prototype; // This will cause an error

Inténtalo tú mismo "

La cadena "eval" no puede ser utilizado como una variable:

"use strict";
var eval = 3.14;         // This will cause an error

Inténtalo tú mismo "

Los "argumentos" de cadena no se pueden usar como una variable:

"use strict";
var arguments = 3.14;    // This will cause an error

Inténtalo tú mismo "

La sentencia no está permitido:

"use strict";
with (Math){x = cos(2)}; // This will cause an error

Inténtalo tú mismo "

Por razones de seguridad, eval() no se le permite crear variables en el ámbito de aplicación de la que se llama:

"use strict";
eval ("var x = 2");
alert (x);               // This will cause an error

Inténtalo tú mismo "

En las llamadas a funciones como f() , el valor de este era el objeto global. En modo estricto, ahora es indefinido.


¡Prueba del futuro!

palabras clave reservadas futuras no están permitidos en el modo estricto. Estos son:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // This will cause an error

Inténtalo tú mismo "


¡Cuidado!

¡Cuidado!

El "use strict" Directiva sólo se reconoce en el comienzo de un script o una función.