"use strict" en JavaScript: ¿nos salva de errores? Análisis completo

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es "use strict" en JavaScript y por qué se debate tanto?

\n\n

¿Alguna vez has escrito código JavaScript que funcionaba «de manera extraña»? ¿Una variable se declaró sola, this apuntaba al objeto global en lugar de lo que esperabas, y el error simplemente se tragaba en silencio? Bienvenido al mundo del JS «sucio».

\n\n

La directiva "use strict" no es una función ni un operador. Es literalmente un interruptor de modo para tu script o función. Cuando escribes "use strict" al inicio de un archivo o función, le dices al motor de JavaScript: «Oye, no me perdones mis errores. Sé más estricto, pero más honesto».

\n\n

Este tema es una de las preguntas más populares en Stack Overflow (miles de visitas). Analicemos qué hace exactamente el modo estricto, por qué fue creado y cómo usarlo sin dispararte en el pie.

\n\n

¿Cómo activar el modo estricto?

\n\n

Solo dos formas:

\n\n
    \n
  • Globalmente (para todo el script): "use strict"; en la primera línea del archivo.
  • \n
  • Localmente (para una función): "use strict"; en la primera línea del cuerpo de la función.
  • \n
\n\n
// Modo estricto global\n"use strict";\nlet x = 10;\n\n// Modo estricto local\nfunction myFunc() {\n  "use strict";\n  let y = 20;\n}
\n\n

Importante: Si mezclas código estricto y no estricto en un mismo archivo (por ejemplo, al concatenar scripts), pueden surgir problemas. Es mejor usar el modo estricto para funciones individuales o módulos (los módulos ES6 son automáticamente estrictos).

\n\n

Top 5 errores que previene "use strict"

\n\n

El objetivo principal de "use strict" es convertir los errores «silenciosos» de JavaScript en excepciones explícitas (errores que se lanzan y se pueden capturar). Aquí están los 5 casos más comunes.

\n\n

1. Prohibición de la creación implícita de variables globales

\n\n

Esto es un clásico. En modo normal, si olvidas escribir var, let o const, la variable se vuelve automáticamente global. Esto puede provocar errores difíciles de detectar.

\n\n
// Sin "use strict"\nfunction sum(a, b) {\n  total = a + b; // ¿Error? No. ¡total se convirtió en variable global!\n}\nsum(2, 3);\nconsole.log(total); // 5 — funciona, pero es terrible.\n\n// Con "use strict"\n"use strict";\nfunction sumStrict(a, b) {\n  total = a + b; // ReferenceError: total is not defined\n}\nsumStrict(2, 3); // ¡Error! El código falla inmediatamente.
\n\n

¿Cómo evitarlo? Declara siempre las variables. Usa let y const en lugar de var para evitar el hoisting y variables globales accidentales.

\n\n

2. Asignación de valor a propiedades no modificables

\n\n

En modo normal, JavaScript ignora silenciosamente el intento de modificar NaN, undefined o un objeto congelado. En modo estricto, se lanza un error.

\n\n
"use strict";\n\n// Intento de sobrescribir NaN\nNaN = 123; // TypeError: Cannot assign to read only property 'NaN'\n\n// Intento de modificar un objeto congelado\nconst obj = Object.freeze({name: "Alice"});\nobj.name = "Bob"; // TypeError: Cannot assign to read only property 'name'
\n\n

¿Cómo evitarlo? No intentes redefinir constantes incorporadas. Usa Object.freeze() de forma consciente.

\n\n

3. Eliminación de variables, funciones y argumentos

\n\n

No puedes eliminar una variable declarada con var o let, ni eliminar una función. En modo normal, esto simplemente se ignora.

\n\n
"use strict";\n\nvar x = 10;\ndelete x; // SyntaxError: Delete of an unqualified identifier in strict mode.\n\nfunction foo() {}\ndelete foo; // SyntaxError
\n\n

¿Cómo evitarlo? No uses delete para variables. Solo es necesario para eliminar propiedades de objetos: delete obj.prop.

\n\n

4. Duplicación de parámetros de fun

Blogs

Book Recommendations