"use strict" em JavaScript: ele salva de erros? Análise completa

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é "use strict" em JavaScript e por que discutem sobre ele?

\n\n

Você já escreveu código JavaScript que funcionava "de forma estranha"? Uma variável se declarava sozinha, this apontava para o objeto global em vez do que você esperava, e um erro era simplesmente engolido em silêncio? Bem-vindo ao mundo do JS "sujo".

\n\n

A diretiva "use strict" não é uma função nem um operador. É literalmente um interruptor de modo para seu script ou função. Quando você escreve "use strict" no início de um arquivo ou função, você diz ao motor JavaScript: "Ei, não me perdoe meus erros. Seja mais rigoroso, mas mais honesto".

\n\n

Este tópico é uma das perguntas mais populares no Stack Overflow (milhares de visualizações). Vamos entender o que exatamente o modo estrito faz, por que foi criado e como usá-lo sem dar um tiro no pé.

\n\n

Como ativar o modo estrito?

\n\n

Apenas duas maneiras:

\n\n
    \n
  • Globalmente (para todo o script): "use strict"; na primeira linha do arquivo.
  • \n
  • Localmente (para uma função): "use strict"; na primeira linha do corpo da função.
  • \n
\n\n
// Modo estrito global\n"use strict";\nlet x = 10;\n\n// Modo estrito local\nfunction myFunc() {\n  "use strict";\n  let y = 20;\n}
\n\n

Importante: Se você misturar código estrito e não estrito no mesmo arquivo (por exemplo, ao concatenar scripts), podem surgir problemas. É melhor usar o modo estrito para funções individuais ou módulos (módulos ES6 são automaticamente estritos).

\n\n

Top 5 erros que "use strict" previne

\n\n

O principal objetivo do "use strict" é transformar erros "silenciosos" do JavaScript em exceções explícitas (erros que são lançados e podem ser capturados). Aqui estão os 5 casos mais comuns.

\n\n

1. Proibição da criação implícita de variáveis globais

\n\n

Isso é clássico. No modo normal, se você esquecer de escrever var, let ou const, a variável se torna automaticamente global. Isso pode levar a bugs difíceis de encontrar.

\n\n
// Sem "use strict"\nfunction sum(a, b) {\n  total = a + b; // Erro? Não. total se tornou uma variável global!\n}\nsum(2, 3);\nconsole.log(total); // 5 — funciona, mas é terrível.\n\n// Com "use strict"\n"use strict";\nfunction sumStrict(a, b) {\n  total = a + b; // ReferenceError: total is not defined\n}\nsumStrict(2, 3); // Erro! O código falha instantaneamente.
\n\n

Como evitar? Sempre declare variáveis. Use let e const em vez de var para evitar hoisting e variáveis globais acidentais.

\n\n

2. Atribuição de valor a propriedades não graváveis

\n\n

No modo normal, o JavaScript ignora silenciosamente a tentativa de alterar NaN, undefined ou um objeto congelado. No modo estrito, um erro é lançado.

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

Como evitar? Não tente redefinir constantes embutidas. Use Object.freeze() de forma consciente.

\n\n

3. Exclusão de variáveis, funções e argumentos

\n\n

Você não pode excluir uma variável declarada com var ou let, nem excluir uma função. No modo normal, isso é simplesmente ignorado.

\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

Como evitar? Não use delete para variáveis. Ele é necessário apenas para excluir propriedades de objetos: delete obj.prop.

\n\n

4. Duplicação de parâmetros de fun

Blogs

Book Recommendations