En la versión 5 de ECMAScript se permite utilizar un modo estricto para que el código se evalúe de forma distinta (con restricciones).
El modo estricto es compatible con IE10+ – tabla de compatibilidad. Si este código se utiliza con Oldie no debe afectar la funcionalidad pero es mejor evaluar y probar el código.
Contexto
Para definir una sección de código que va a ser evaluada de manera estricta se utiliza la cadena de texto “use strict”.
Esta declaración se puede utilizar en todo el script o por función. Cuando se utiliza en dentro de una función únicamente evaluar el código dentro de una función con modo estricto.
<script>
/* Utilizar Modo estricto en todo el script. */
"use strict";
/*
Todo el código se va a evaluar de manera estricta
*/
</script>
/*
Utilizar Modo estricto en algunas funciones.
Útil si vamos a incorporar código desarrollado por terceros.
*/
function modo_estricto() {
"use strict";
/*
Unicamente el código dentro de la función
se va a evaluar de modo estricto.
*/
}
Hay que tener cuidado al momento de utilizarlo en todo el script, sobre todo si se utiliza código externo.
Algunas de las restricciones generales o “básicas” que va a tener el modo estricto son.
General
Variables: No se pueden utilizar variables sin declarar.
"use strict";
valor_modo_estricto = 10;
/*
Para evitar este error hay que declarar
las variables antes de utilizarlas.
var valor_modo_estricto = 10;
*/
No se pueden utilizar algunas palabras reservadas (aunque no haya implementación) para nombres de variables, funciones, propiedades, etc. Algunas de estas palabras son: implements, interface, package, private, protected, public, static, yield.
/*
No utilizar palabras reservadas.
*/
"use strict";
var yield = "Palabra reservada";
console.log(yield);
Más palabras reservadas en MDN.
No se pueden utilizar números octales.
"use strict";
var octal = 02 + 07;
console.log(octal);
Funciones
No se pueden tener dos parámetros con el mismo nombre en una función.
"use strict";
function no_duplicar_parametros(param_uno, param_uno, param_tres) {
var uno = param_uno;
var dos = param_uno;
var tres = param_tres;
console.log(uno + dos + tres);
}
No se pueden declarar funciones dentro de un bloque de código.
"use strict";
var nombre;
nombre = prompt("Nombre: ");
if (nombre == 'admin') {
function iniciar_sesion() {
console.log("Iniciando sesion...");
}
iniciar_sesion();
}
Objetos
Un objeto no puede tener dos propiedades con el mismo nombre.
"use strict";
var mi_personaje;
mi_personaje = {
nombre: "Fu",
edad: 10,
nombre: "bar"
}
this
El valor de this no se asocia al objeto global.
"use strict";
(function valor_this() {
console.log(this)
}());
/*
En este caso
this devuelve undefined
Si no estuviera en modo estricto
devuelve el objeto Window.
*/
Es mejor comenzar a utilizar el modo estricto para corregir ciertos detalles que pudieran existir en nuestro código.