"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";
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)
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)
No se permite borrar una variable (u objeto).
"use strict";
var x = 3.14;
delete x; // This
will cause an error
No se permite borrar una función.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
No se permite la duplicación de un nombre de parámetro:
"use strict";
function x(p1, p1) {}; // This will cause an error
Octal literales numéricos no están permitidos:
"use strict";
var x = 010; // This
will cause an error
Escapar caracteres no están permitidos:
"use strict";
var x = \010; // This will cause an error
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
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
No se permite borrar una propiedad imborrable:
"use strict";
delete Object.prototype; // This will cause an error
La cadena "eval" no puede ser utilizado como una variable:
"use strict";
var eval = 3.14; // This will cause an error
Los "argumentos" de cadena no se pueden usar como una variable:
"use strict";
var arguments = 3.14; // This will cause an error
La sentencia no está permitido:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
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
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
¡Cuidado!
¡Cuidado!
El "use strict" Directiva sólo se reconoce en el comienzo de un script o una función.