Strict mode I

Categories:

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.