El modo estricto (use strict) en JavaScript: ¿Que es y como usar?
¿Sabías que JavaScript tiene un modo estricto que ayuda a escribir código más seguro y sin errores ocultos? Activarlo cambia algunas reglas del lenguaje, evitando malas prácticas y optimizando el rendimiento. Descubre qué es, cómo usarlo y qué hace con un ejemplo claro que te permitirá aprovechar sus características al máximo.

Índice
1. ¿Qué es el modo estricto en JavaScript?
El «modo estricto» (strict mode) en JavaScript es una característica que se introdujo en ECMAScript 5, que fue lanzado en 2009. Su objetivo principal es permitirte escribir código más limpio, seguro y menos propenso a errores.
¿CÓMO FUNCIONA
Al activar el modo estricto, se aplican una serie de reglas y restricciones más rigurosas en el código. Esto significa que algunas acciones que antes eran permitidas o ignoradas por el intérprete de JavaScript, ahora generarán errores o excepciones.
- Principales características del modo estricto:
- Ejemplo básico sobre como funciona el modo estricto:
- Diferencias entre código en modo estricto y código sin él
¿Qué es un intérprete?
En términos sencillos, un intérprete es como un traductor en tiempo real. Imagina que tienes un libro escrito en un idioma que no entiendes. Necesitas a alguien que lo lea línea por línea y te lo explique en tu idioma. Eso es exactamente lo que hace un intérprete con el código JavaScript.
¿Cómo funciona el intérprete de JavaScript?
Cuando escribes código JavaScript, este código no se ejecuta directamente por la computadora. En su lugar, el intérprete de JavaScript toma tu código y lo traduce a un lenguaje que la computadora pueda entender (lenguaje de máquina). Este proceso de traducción se realiza línea por línea, a medida que el código se ejecuta.
¿Dónde se encuentra el intérprete de JavaScript?
El intérprete de JavaScript más común es el que se encuentra integrado en los navegadores web modernos, como Google Chrome, Firefox, Safari o Edge. Cada navegador tiene su propio motor de JavaScript (que es una implementación del intérprete), como V8 (de Chrome) o SpiderMonkey (de Firefox).
1.1. Principales características del modo estricto:
- ✅ Detecta errores silenciosos
- «Sin use strict», algunos errores simplemente son ignorados por JavaScript sin mostrar advertencias. En modo estricto, esos errores lanzan excepciones y son más fáciles de identificar y corregir.
- ✅ Previene malas prácticas
- El modo estricto impide el uso de variables sin declarar, restringe el uso de palabras reservadas y evita cambios en objetos no modificables.
- ✅ Mejora el rendimiento
- Los motores de JavaScript pueden optimizar mejor el código en modo estricto porque elimina algunas funciones problemáticas y hace que el código sea más predecible.
- ✅ Refuerza la seguridad
- En modo estricto, ciertas acciones que podrían ser peligrosas (como el uso inseguro de
eval()o el acceso indebido athis) están bloqueadas, reduciendo vulnerabilidades en el código. - ✅ Código más limpio y mantenible
- Al fomentar buenas prácticas de programación y evitar errores comunes, el modo estricto contribuye a escribir código más legible, fácil de mantener y menos propenso a errores.
1.2. Ejemplo básico sobre como funciona el modo estricto:
"use strict";
x = 10; // ❌ Error: x is not defined
console.log(x);Lenguaje del código: JavaScript (javascript)
Explicación:
- Se activa con «use strict» (ampliaremos).
- Sin el modo estricto, esta línea asignaría
10axaunque no esté declarada. - Con
"use strict", JavaScript lanza un error porque las variables deben declararse explícitamente conlet,constovar.
1.3. Diferencias entre código en modo estricto y código sin él
Aquí tienes una tabla comparativa de las principales diferencias que iremos ampliando:
| Característica | Modo Normal | Modo Estricto |
|---|---|---|
| Uso de variables sin declarar | ✅ Permitido | ❌ Error |
| Escritura en propiedades de solo lectura | ✅ Ignorado | ❌ Error |
| Uso de palabras reservadas | ✅ Permitido | ❌ Error |
| Parámetros duplicados en funciones | ✅ Permitido | ❌ Error |
this en funciones sin contexto | 🌐 Se refiere al objeto global (window) | 🔍 undefined |
Uso de with | ✅ Permitido | ❌ Error |
Uso inseguro de eval() | ✅ Puede modificar el entorno global | ❌ Solo afecta su propio ámbito |
2. ¿Cómo activar el modo estricto en JavaScript?
- Uso de «use strict»; a nivel de script (global)
- Uso de «use strict»; dentro de una función (modo estricto local)
- Diferencias entre modo estricto global y modo estricto local
- Conclusión:
El modo estricto se activa mediante la instrucción:
"use stricti";Lenguaje del código: JavaScript (javascript)
Esta instrucción debe colocarse antes de cualquier otro código ejecutable. Veamos cómo activarlo:
- A nivel global
- A nivel de función
Junto con sus diferencias.
2.1. Uso de "use strict"; a nivel de script (global)
2.1.1. ¿Qué significa «a nivel de script (global)»?
En JavaScript, el término «script» se refiere al código que se ejecuta en un archivo .js o dentro de una etiqueta <script> en un archivo HTML. Cuando colocas "use strict"; al principio de un archivo .js o dentro de una etiqueta <script>, estás activando el modo estricto para todo (global) el código que se encuentre dentro de ese archivo o etiqueta. Esto se conoce como «ámbito global» o «a nivel de script».
2.1.2. ¿Cómo funciona?
Cuando activas el modo estricto a nivel global, todas las reglas y restricciones del modo estricto se aplicarán a todo el código JavaScript que se encuentre en ese archivo o etiqueta <script>. Esto incluye tanto el código que escribas directamente como cualquier otro código que se incluya a través de otros archivos o bibliotecas.
2.1.3. Ejemplo de uso de "use strict"; a nivel de script (global):
// archivo.js
"use strict"; // Modo estricto activado para todo el archivo
x = 10; // Error: x no está declarada
function miFuncion() {
y = 20; // Error: y no está declarada (el modo estricto se aplica a todo el código)
}Lenguaje del código: JavaScript (javascript)
Como vemos en el ejemplo, tanto la variable como la función quedan bajo las restricciones del modo estricto.
2.1.4. Recomendaciones al usar el modo estricto globalmente:
- Si necesitas desactivar el modo estricto en una parte específica de tu código, puedes crear una función y no incluir
"use strict";dentro de ella: Esto te permitirá tener un código más flexible en casos excepcionales. - Activa el modo estricto a nivel global siempre que sea posible: Esto te ayudará a escribir código más seguro y confiable.
- Si utilizas bibliotecas de terceros, asegúrate de que sean compatibles con el modo estricto: Algunas bibliotecas antiguas pueden no funcionar correctamente en modo estricto.
2.2. Uso de "use strict"; dentro de una función (modo estricto local)
2.2.1. ¿Qué significa «modo estricto local»?
Cuando colocas la directiva "use strict"; dentro de una función específica, estás activando el modo estricto únicamente para el código que se encuentra dentro de esa función. Esto significa que las reglas y restricciones del modo estricto solo se aplicarán a esa función en particular, y no afectarán al resto del código JavaScript que se encuentre fuera de ella.
2.2.2. ¿Cómo funciona?
Al activar el modo estricto dentro de una función, te aseguras de que el código dentro de esa función se ejecute bajo las reglas más estrictas. Esto es útil para evitar que el código de una función afecte accidentalmente a otras partes del programa, y viceversa.
2.2.3. Ejemplo de uso de "use strict"; dentro de una función
function miFuncion() {
"use strict"; // Modo estricto activado solo para esta función
x = 10; // Error: x no está declarada (solo dentro de la función)
}
y = 20; // Esto está permitido, ya que el modo estricto no se aplica aquí
miFuncion();
Lenguaje del código: JavaScript (javascript)
2.2.4. Recomendaciones de uso de "use strict"; localmente:
- Utiliza el modo estricto local cuando necesites aislar el código de una función o cuando quieras aplicar reglas más estrictas solo a una parte específica de tu código.
- Si utilizas bibliotecas de terceros, es posible que necesites activar el modo estricto local para evitar conflictos con el código de la biblioteca.
- Recuerda que el modo estricto local solo se aplica al código dentro de la función. El código fuera de la función no se verá afectado.
2.3. Diferencias entre modo estricto global y modo estricto local
| Característica | Modo Estricto Global | Modo Estricto Local |
|---|---|---|
| Alcance | Afecta todo el archivo | Solo afecta la función donde se declara |
| Impacto en otras funciones | Todas las funciones del archivo están en modo estricto | Otras funciones siguen en modo normal |
| Compatibilidad con código antiguo | Puede afectar código que no estaba preparado para modo estricto | Es más seguro si solo queremos restricciones en una función específica |
🔹 Ejemplo comparativo:
"use strict"; // Modo estricto global
function globalStrict() {
z = 50; // ❌ Error: z no está definida
console.log(z);
}
function localNormal() {
w = 60; // ✅ Permitido (pero mala práctica)
console.log(w);
}
globalStrict(); // Lanza un error
localNormal(); // Funciona sin errorLenguaje del código: JavaScript (javascript)
Explicación:
globalStrict()lanza un error porque"use strict";está activado a nivel global.localNormal()funciona normalmente porque no está dentro de una función con"use strict";.
🔹 Ejemplo con modo estricto solo en una función:
function modoNormal() {
a = 5; // ✅ No genera error (modo normal)
console.log(a);
}
function modoEstricto() {
"use strict";
b = 10; // ❌ Error: b no está definida
console.log(b);
}
modoNormal(); // ✅ Funciona
modoEstricto(); // ❌ Genera errorLenguaje del código: JavaScript (javascript)
Explicación:
modoNormal()funciona en modo normal y permite la asignación sin declaración.modoEstricto()tiene"use strict";activado dentro de la función, lo que impide la asignación sin declaración.
2.4. Conclusión:
✔ Modo estricto global afecta todo el script y es útil para asegurar que todo el código siga buenas prácticas.
✔ Modo estricto local solo afecta una función específica, lo que permite migrar código gradualmente sin romper compatibilidad.
✔ Usarlo correctamente mejora la seguridad y depuración del código, evitando errores difíciles de detectar.
3. ¿Para qué se utiliza el modo estricto en JS?
Como ya dijimos, el modo estricto ("use strict") en JavaScript sirve para mejorar la seguridad, optimización y calidad del código al restringir ciertas prácticas problemáticas y evitar errores comunes.
A continuación te nombro los usos mas comunes:
- Evita la creación accidental de variables globales.
- Previene errores silenciosos al lanzar excepciones.
- Restringe palabras reservadas para futuras versiones de JavaScript
- Hace que this en funciones sea undefined en lugar del objeto global
- Prohíbe la duplicación de parámetros en funciones
- Impide modificar arguments dentro de una función
- Modo estricto en clases y módulos en JavaScript
3.1. Evita la creación accidental de variables globales.
3.1.1. ¿Por qué es importante evitar la creación accidental de variables globales en JavaScript?
En JavaScript, si olvidas declarar una variable con let, const o var, el lenguaje (sin modo estricto) la crea automáticamente como una variable global. Esto puede causar errores difíciles de detectar, conflictos en el código y afectar el rendimiento.
Aquí te nombro algunas de consecuencias de hacer esto:
- Contaminación del espacio de nombres global:
- Las variables globales residen en el objeto global (
windowen los navegadores). Si creas accidentalmente muchas variables globales, puedes sobreescribir variables existentes o interferir con el código de otras bibliotecas o scripts que se ejecuten en la misma página web.
- Las variables globales residen en el objeto global (
- Dificultad para mantener el código:
- Las variables globales son accesibles desde cualquier parte del código. Esto puede hacer que sea difícil rastrear dónde se definen y modifican las variables, lo que aumenta la complejidad del código y dificulta su mantenimiento y depuración.
- Problemas de rendimiento:
- El acceso a variables globales puede ser más lento que el acceso a variables locales, ya que el intérprete de JavaScript tiene que buscar la variable en el ámbito global.
- Riesgo de seguridad:
- En algunos casos, la creación accidental de variables globales puede generar vulnerabilidades de seguridad si se utilizan para almacenar información sensible.
3.1.2. Ejemplo declarando una variable sin modo estricto (problema)
function sumar(a, b) {
resultado = a + b; // ❌ No declarada correctamente
return resultado;
}
console.log(sumar(10, 5));
console.log(resultado); // ⚠️ Se imprime 15, pero no debería existir aquíLenguaje del código: JavaScript (javascript)
🔍 ¿Qué está pasando aquí?
resultadono se declara conlet,constnivar, por lo que se crea automáticamente como una variable global.- Esto significa que
resultadoqueda accesible fuera de la función, lo cual es un comportamiento no deseado.
⚠️ ¿Por qué es peligroso?
- Riesgo de sobrescribir valores globales
- Si otra parte del código usa
resultado, puede modificarse accidentalmente.
- Si otra parte del código usa
- Dificultad para depurar errores
- No es obvio que la variable
resultadose ha creado globalmente sin intención.
- No es obvio que la variable
- Malas prácticas en código escalable
- En proyectos grandes, este error puede generar problemas de mantenimiento.
3.1.3. Ejemplo declarando una variable con modo estricto (solución correcta)
"use strict";
function sumar(a, b) {
let resultado = a + b; // ✅ Declarada correctamente
return resultado;
}
console.log(sumar(10, 5));
console.log(resultado); // ❌ ReferenceError: resultado is not definedLenguaje del código: JavaScript (javascript)
🔍 ¿Qué cambió?
- Al activar
"use strict";, JavaScript lanza un error si se intenta usar una variable sin declararla. resultadoahora está correctamente declarada conletdentro de la función y no afecta el entorno global.
3.1.4. Conclusión: ¿Por qué es importante evitar las variables globales accidentales?
✔ Evita errores difíciles de depurar.
✔ Mejora la seguridad del código, evitando sobrescrituras no deseadas.
✔ Hace que el código sea más predecible y fácil de mantener.
✔ Permite que los motores de JavaScript optimicen mejor el rendimiento.
3.2. Previene errores silenciosos al lanzar excepciones.
3.2.1. ¿Por qué es importante que el modo estricto prevenga errores silenciosos en JavaScript?
En JavaScript, sin "use strict", algunos errores no generan excepciones y el código sigue ejecutándose como si nada, aunque internamente ocurra un fallo. Esto se conoce como errores silenciosos y puede hacer que el código se comporte de manera inesperada sin que el programador se dé cuenta.
✅ Con el modo estricto activado, JavaScript lanza una excepción (error visible) en lugar de ignorar el problema, facilitando la detección y corrección de errores.
3.2.2 Ejemplo sin modo estricto (error silencioso)
let objeto = Object.freeze({ nombre: "Manuel" });
objeto.nombre = "Alejandro"; // ❌ No cambia, pero NO lanza error
console.log(objeto.nombre); // 🛑 Sigue mostrando "Manuel"Lenguaje del código: JavaScript (javascript)
🔍 ¿QUÉ PASA AQUÍ?
Object.freeze()hace queobjetosea inmutable (no se le pueden agregar ni modificar propiedades).- Sin embargo, JavaScript NO lanza un error cuando intentamos cambiar
nombre; simplemente ignora la asignación. - PROBLEMA: El desarrollador cree que
nombrecambió a"Alejandro", pero sigue siendo"Manuel", generando confusión.
3.2.3. Ejemplo con modo estricto (se lanza una excepción)
"use strict";
let objeto = Object.freeze({ nombre: "Manuel" });
objeto.nombre = "Alejandro"; // ❌ TypeError: Cannot assign to read-only property 'nombre'Lenguaje del código: JavaScript (javascript)
🔍 ¿QUÉ CAMBIÓ?
- Ahora JavaScript lanza un
TypeError, indicando que no se puede modificar una propiedad de solo lectura. - Esto permite detectar el problema de inmediato en lugar de que el código siga ejecutándose con valores incorrectos.
3.2.4. ¿Por qué es importante evitar errores silenciosos?
1️⃣ Evita que el código se ejecute con valores incorrectos.
2️⃣ Facilita la depuración, ya que los errores se detectan al instante.
3️⃣ Mejora la confiabilidad del programa.
4️⃣ Evita comportamientos inesperados en el código.
💡 CONCLUSIÓN: El modo estricto obliga a JavaScript a ser más estricto con los errores, haciendo que el código sea más seguro, robusto y fácil de mantener.
3.3. Restringe palabras reservadas para futuras versiones de JavaScript
3.3.1. ¿Por qué el modo estricto restringe palabras reservadas para futuras versiones de JavaScript?
JavaScript está en constante evolución, y con cada nueva versión se agregan nuevas palabras clave (keywords) para funciones y características del lenguaje.
✅ El modo estricto evita que los programadores usen palabras que podrían convertirse en palabras clave en el futuro.
❌ Sin modo estricto, podrías escribir código que funcione hoy, pero que en una futura versión de JavaScript cause errores inesperados.
3.3.2. Ejemplo sin modo estricto (potencial problema en el futuro)
var public = "dato"; // ⚠️ Esto funciona por ahora
console.log(public);Lenguaje del código: PHP (php)
🔍 ¿Qué pasa aquí?
- La palabra
publicno es una palabra reservada en JavaScript ES5, así que el código funciona. - PROBLEMA: En versiones futuras,
publicpodría convertirse en una palabra clave (como en otros lenguajes como Java o C#).
3.3.3. Ejemplo con modo estricto (prevención de errores futuros)
"use strict";
var public = "dato"; // ❌ SyntaxError: Unexpected strict mode reserved wordLenguaje del código: JavaScript (javascript)
🔍 ¿Qué cambió?
- Ahora JavaScript lanza un error porque
publices una palabra reservada en modo estricto. - Así evitamos escribir código que se rompa en el futuro cuando
publicse vuelva una palabra clave oficial.
3.3.4. Lista de algunas palabras reservadas en modo estricto
🔹 implements
🔹 interface
🔹 package
🔹 private
🔹 protected
🔹 public
🔹 static
🔹 yield
3.3.5. Beneficios de esta restricción
1️⃣ Evita que el código quede obsoleto en futuras versiones de JavaScript.
2️⃣ Reduce el riesgo de errores inesperados cuando el lenguaje evolucione.
3️⃣ Fomenta buenas prácticas al escribir código compatible con el futuro.
💡 CONCLUSIÓN: El modo estricto protege tu código contra posibles cambios en el lenguaje, asegurando que no uses nombres que podrían volverse palabras clave en nuevas versiones de JavaScript.
3.4. Hace que this en funciones sea undefined en lugar del objeto global
3.4.1. ¿Por qué el modo estricto hace que this en funciones sea undefined en lugar del objeto global?
En JavaScript, el valor de this depende de cómo se llame una función. Sin modo estricto, si llamas una función sin un contexto explícito, this se refiere al objeto global (window en navegadores o global en Node.js).
⚠️ Esto puede ser peligroso porque puede modificar accidentalmente variables globales.
✅ Con modo estricto, this en una función que no pertenece a un objeto será undefined, lo que ayuda a evitar errores inesperados y mejora la seguridad del código.
3.4.2. Ejemplo sin modo estricto (peligro: this apunta al objeto global)
function mostrarThis() {
console.log(this); // ⚠️ `this` apunta al objeto global (window en navegadores)
}
mostrarThis(); // 🛑 En un navegador, imprimirá `window`Lenguaje del código: JavaScript (javascript)
🔍 ¿Qué pasa aquí?
- Como la función
mostrarThis()se llama sin un contexto explícito, en modo no estrictothistoma el valor del objeto global (window). - PROBLEMA: Si dentro de la función modificamos una propiedad de
this, ¡podríamos cambiar valores globales accidentalmente!
3.4.3. Ejemplo con modo estricto (seguridad mejorada)
"use strict";
function mostrarThis() {
console.log(this); // ❌ `this` es `undefined`
}
mostrarThis(); // 🔥 Imprime `undefined` en lugar de `window`Lenguaje del código: JavaScript (javascript)
🔍 ¿Qué cambió?
- Ahora, al ejecutar
mostrarThis(), JavaScript lanza un error si intentamos acceder o modificarthis, porque su valor esundefined. - Evita modificar accidentalmente variables globales y hace que el código sea más seguro.
3.4.4. Beneficios de usar this con modo estricto.
1️⃣ Evita modificar el objeto global accidentalmente.
2️⃣ Hace que el código sea más predecible y fácil de depurar.
3️⃣ Reduce errores en funciones que dependen de this, como callbacks o eventos.
💡 CONSLUSIÓN: El modo estricto hace que this en funciones sin contexto explícito sea undefined en lugar del objeto global, evitando errores peligrosos y mejorando la seguridad del código.
3.5. Prohíbe la duplicación de parámetros en funciones
3.5.1. ¿Por qué el modo estricto prohíbe la duplicación de parámetros en funciones?
En JavaScript, antes de la introducción del modo estricto, era posible declarar dos o más parámetros con el mismo nombre en una función. Esto podía generar confusión y errores difíciles de detectar, porque JavaScript solo tomaba el último valor asignado al parámetro duplicado.
✅ Con el modo estricto activado, JavaScript lanza un error si encuentra parámetros duplicados en una función, evitando este tipo de problemas
3.5.2. Ejemplo sin modo estricto (problema de parámetros duplicados)
function sumar(a, b, a) { // ⚠️ `a` está duplicado
console.log(a + b); // 🛑 ¿Qué valor tiene realmente `a`?
}
sumar(2, 3, 5); // ❌ Salida inesperada: 8Lenguaje del código: JavaScript (javascript)
🔍 ¿Qué pasa aquí?
- La función
sumar(a, b, a)tiene dos parámetros llamadosa, lo cual está permitido sin modo estricto. - PROBLEMA: El último parámetro
asobrescribe al primero, por lo queatomará el valor5, no2. - Esto puede causar errores difíciles de detectar en funciones complejas.
3.5.3. Ejemplo con modo estricto (se lanza un error)
"use strict";
function sumar(a, b, a) { // ❌ SyntaxError: Duplicate parameter name not allowed
console.log(a + b);
}Lenguaje del código: JavaScript (javascript)
🔍 ¿Qué cambió?
- Ahora, JavaScript lanza un
SyntaxErrorinmediatamente, evitando confusión. - Esto obliga al programador a corregir el código, haciendo que sea más claro y seguro.
3.5.4. Beneficios de esta restricción
1️⃣ Evita errores difíciles de detectar cuando los parámetros cambian de valor.
2️⃣ Hace que el código sea más predecible y fácil de leer.
3️⃣ Reduce errores en funciones complejas que manejan múltiples parámetros.
💡 CONLUSIÓN: El modo estricto prohíbe la duplicación de parámetros para evitar confusión, mejorar la legibilidad y prevenir errores inesperados en la ejecución.
3.6. Impide modificar arguments dentro de una función
3.6.1. ¿Por qué el modo estricto impide modificar arguments dentro de una función?
En JavaScript, la variable especial arguments contiene los valores pasados a una función. Sin modo estricto, arguments es mutable, lo que significa que si cambias un parámetro dentro de la función, también se modifica el valor dentro de arguments (y viceversa).
⚠️ Esto puede causar problemas inesperados y hacer que el código sea difícil de depurar.
✅ Con el modo estricto activado, modificar arguments directamente está prohibido, evitando estos errores.
3.6.2. Ejemplo sin modo estricto (peligro: arguments mutable)
function cambiarArgumentos(a) {
console.log(arguments[0]); // 🔹 Imprime el valor original de `a`
a = 10; // ⚠️ Modificamos `a`
console.log(arguments[0]); // 😱 ¡También cambia en `arguments`!
}
cambiarArgumentos(5);
// 🔹 Imprime: 5
// 😱 Imprime: 10 (porque `arguments` fue modificado junto con `a`)Lenguaje del código: JavaScript (javascript)
🔍 ¿Qué pasa aquí?
- Se le pasa
5acambiarArgumentos(a), por lo quea = 5. - Cuando se cambia
a = 10, el valor dentro dearguments[0]también cambia. - Este comportamiento puede generar confusión y errores difíciles de rastrear.
3.6.3. Ejemplo con modo estricto (error al modificar arguments)
"use strict";
function cambiarArgumentos(a) {
arguments[0] = 10; // ❌ TypeError: Cannot assign to read-only property
}
cambiarArgumentos(5);Lenguaje del código: JavaScript (javascript)
🔍 ¿Qué cambió?
- El modo estricto impide modificar
arguments, lanzando un error (TypeError). - Esto evita errores inesperados y hace que el código sea más seguro y predecible.
3.6.4. Alternativa correcta sin modificar arguments
"use strict";
function cambiarArgumentos(a) {
let nuevoValor = 10; // ✅ Asignamos un nuevo valor sin modificar `arguments`
console.log(nuevoValor); // 🔥 10
}
cambiarArgumentos(5);Lenguaje del código: JavaScript (javascript)
✅ Aquí la función usa una nueva variable en lugar de modificar arguments, evitando efectos colaterales.
3.6.5. Beneficios de esta restricción
1️⃣ Evita cambios inesperados en los valores originales de los argumentos.
2️⃣ Hace que el código sea más predecible y fácil de depurar.
3️⃣ Fomenta el uso de prácticas más limpias, como los parámetros REST (...args).
💡 CONCLUSIÓN: El modo estricto impide modificar arguments para evitar errores silenciosos, mejorar la legibilidad del código y prevenir efectos colaterales no deseados.
3.7. Modo estricto en clases y módulos en JavaScript
Cuando trabajamos con clases (class) y módulos (import/export) en ES6+, el modo estricto ("use strict") está activado por defecto. Esto significa que no es necesario agregar "use strict"; manualmente dentro de una clase o un módulo.
En este apartado veremos:
- Cómo el modo estricto está activado por defecto en
classyimport/export. - Implicaciones del modo estricto en clases en ES6+.
3.7.1. El modo estricto está activado por defecto en class y import/export
Desde ES6 (ECMAScript 2015), todas las clases (class) y módulos (import/export) usan el modo estricto automáticamente, sin necesidad de especificarlo con "use strict";.
🔹 Ejemplo de una clase en JavaScript
class Persona {
constructor(nombre) {
this.nombre = nombre;
}
saludar() {
console.log(`Hola, soy ${this.nombre}`);
}
}
const persona1 = new Persona("Manuel");
persona1.saludar(); // ✅ Salida: Hola, soy ManuelLenguaje del código: JavaScript (javascript)
🔍 Explicación:
- No hemos agregado
"use strict";, pero todas las reglas del modo estricto se aplican automáticamente dentro de la clase. - Cualquier error que el modo estricto detectaría, como el uso de variables sin declarar, será reportado por defecto.
🔹 Ejemplo de un módulo ES6 (import/export)
Archivo modulo.js:
export function saludar(nombre) {
return `Hola, ${nombre}`;
}Lenguaje del código: JavaScript (javascript)
Archivo app.js:
import { saludar } from './modulo.js';
console.log(saludar("Manuel")); // ✅ Salida: Hola, ManuelLenguaje del código: JavaScript (javascript)
🔍 Explicación:
- Aunque no usamos
"use strict";explícitamente, el modo estricto ya está activado dentro del módulo. - Esto evita errores comunes como el uso de variables no declaradas o la sobrescritura de propiedades protegidas.
✅ Beneficio:
- No es necesario escribir
"use strict";en cada archivo de código moderno que use clases o módulos. - Evita errores comunes y mejora la seguridad del código automáticamente.
3.7.2. Implicaciones del modo estricto en Clases en ES6+
Las clases en JavaScript siguen automáticamente las reglas del modo estricto, lo que introduce ciertas restricciones y mejoras:
🔹 EJEMPLO 1: No se permite el uso de variables sin declarar
class Coche {
constructor(marca) {
modelo = "Sedán"; // ❌ Error: modelo no está definido
this.marca = marca;
}
}
const miCoche = new Coche("Toyota");Lenguaje del código: JavaScript (javascript)
🔍 Explicación:
- En modo no estricto, JavaScript crearía
modeloautomáticamente en el ámbito global. - En modo estricto, esto genera un error porque
modelono está declarado conlet,constovar.
✅ Beneficio:
Evita errores de variables globales accidentales.
🔹 EJEMPLO 2: No se puede asignar valores a propiedades read-only o no configurables
Object.defineProperty(window, "PI", { value: 3.1416, writable: false });
class Matematica {
constructor() {
this.PI = 3.14; // ❌ Error en modo estricto
}
}Lenguaje del código: JavaScript (javascript)
🔍 Explicación:
- Como
window.PIfue definido como no modificable, el modo estricto lanza un error en lugar de ignorar la asignación.
✅ Beneficio:
Protege propiedades importantes y evita modificaciones accidentales.
🔹 EJEMPLO 3: No se permite el uso de this en funciones sin contexto de objeto
class Ejemplo {
static metodo() {
console.log(this); // ❌ En modo estricto, `this` es `undefined`
}
}
Ejemplo.metodo(); Lenguaje del código: JavaScript (javascript)
🔍 Explicación:
- En modo estricto, si una función se ejecuta sin un contexto explícito,
thisseráundefineden lugar de apuntar awindowoglobal.
✅ Beneficio:
Ayuda a evitar errores donde this apunta a un objeto inesperado.
3.7.3. Conclusión:
- El modo estricto se aplica automáticamente en
classyimport/export, sin necesidad de escribir"use strict";. - Las clases siguen reglas estrictas que evitan errores comunes, como variables sin declarar o modificaciones accidentales.
- Si trabajas con código tradicional fuera de módulos y clases, recuerda activar
"use strict";manualmente.
💡 EN RESUMEN: Si trabajas con ES6+ (clases y módulos), el modo estricto ya está activado, lo que mejora la seguridad y la calidad del código automáticamente. 🚀
4. Preguntas frecuentes y resumen sobre el modo estricto en JS.
El modo estricto es una funcionalidad que restringe ciertas acciones en JavaScript, ayudando a escribir código más seguro y optimizado. Evita errores comunes, mejora la optimización del código y previene el uso de malas prácticas, como el uso de variables sin declarar.
Para activarlo, agrega "use strict"; al inicio de un script o función. Esto impone reglas más estrictas en el código. Si se declara dentro de una función, solo afecta a esa función, mientras que si está al inicio de un archivo, se aplica a todo el script.
En modo estricto, errores silenciosos se vuelven explícitos, variables no declaradas causan errores, this en funciones no asigna window por defecto, y se prohíben ciertas palabras reservadas para futuras versiones de JavaScript.
Evita el uso de variables sin declarar, la modificación de propiedades no configurables, el uso de palabras reservadas futuras, la asignación a propiedades de solo lectura y el uso de this en contextos no válidos, reduciendo errores en tiempo de ejecución.
Obliga a declarar variables antes de usarlas, evitando errores por asignaciones accidentales a variables globales implícitas. Sin modo estricto, JavaScript crea automáticamente variables globales cuando se asignan sin declarar, lo que puede generar errores difíciles de rastrear.
En modo estricto, si this se usa en una función sin un objeto que lo asigne, su valor será undefined en lugar del objeto global (window en navegadores). Esto evita errores al trabajar con funciones que dependen de un contexto explícito.
Las ventajas incluyen mejor seguridad, prevención de errores silenciosos y optimización del código. Como desventaja, puede causar errores en código heredado que no sigue sus reglas, requiriendo ajustes para que funciones correctamente.
Sí, es recomendable, ya que ayuda a detectar errores antes y mejora el rendimiento del código. Sin embargo, en proyectos con código antiguo, puede requerir modificaciones para adaptarse a sus restricciones, lo que debe evaluarse antes de aplicarlo globalmente.
