O modo estrito em JavaScript restringe as regras para certos comportamentos. Aqui está tudo o que você precisa saber sobre isso.
JavaScript é uma linguagem que perdoa. Algumas de suas sintaxes são opcionais e a linguagem se recupera de erros com mais facilidade do que muitas outras. Mas essa pegada vem com uma penalidade: pode ser mais fácil introduzir bugs e o código inconsistente é mais difícil de ler.
Felizmente, se você quiser exercer mais disciplina, há uma maneira fácil de fazer isso: modo estrito. O modo estrito é uma forma de solicitar que o JavaScript reaja de forma mais decisiva ao encontrar problemas em seu código.
O que é um modo estrito?
Diversas linguagens usam o conceito de modo estrito: um modo que avalia e executa o código com mais rigor. Você pode estar familiarizado com o doctype estrito de HTML, que reprova certos elementos e atributos.
Perl, outra linguagem de script interpretada, há muito tem seu próprio modo estrito. Este modo proíbe certos tipos de expressão insegura.
Como faço para usar o modo estrito em JavaScript?
Dentro de um script, coloque uma instrução “use strict” logo no início, antes de qualquer outra instrução:
// this entire script will be in strict mode
'use strict';
Observe que você pode incluir um comentário antes dele, mas nenhuma declaração. Você pode habilitar o modo estrito em um arquivo JavaScript ou no início de um bloco de script em um arquivo HTML. Você também pode ativar o modo estrito em uma base função por função:
function strict() {
// Function-level strict mode syntax
'use strict';
return "This function is strict";
}
function loose() {
return "This function is NOT strict";
}
Depois de habilitar o modo estrito, certifique-se de testar seu código. Se você estiver trabalhando com a web, abra um console JavaScript para identificar novos erros.
O que o modo estrito do JavaScript faz?
Em suma, o modo estrito será menos tolerante com certos tipos de código problemático. Em vez de ignorar problemas e continuar a execução, certos erros irão interromper o script. Isso geralmente é mais seguro do que continuar em circunstâncias indesejáveis.
Previne Globals Acidentais
O melhor exemplo contra o qual o modo estrito protege é a criação de variáveis globais acidentais. Em execução normal, este código:
myVar = 17;
Ele criará uma propriedade chamada myVar no objeto global, supondo que você não tenha declarado myVar anteriormente. Em um navegador da web, o objeto global geralmente é a janela:
console.log(window.myVar);
>> 17
Se você incluir uma instrução “use strict”, no entanto, verá um erro no console, algo como:
Uncaught ReferenceError: myVar is not defined
A razão pela qual isso é tão útil é que ele detecta um caso comum de erro de digitação. É fácil digitar incorretamente um nome de variável e muitas linguagens nos pegariam nesse tipo de erro.
Mas JavaScript, por padrão, simplesmente assume o escopo do objeto global e continua como se nada estivesse errado. Alguns códigos podem depender intencionalmente desse comportamento, que é algo que você deve estar ciente ao decidir usar o modo estrito.
Torna a falha explícita
Algum comportamento em JavaScript falha, mas o faz silenciosamente. Você pode não saber sobre esses erros, a menos que os esteja verificando especificamente. Por exemplo, NaN é uma propriedade especial do objeto global que representa um número inválido. Esta propriedade é somente leitura, mas você ainda pode tentar gravá-la:
NaN = 2;
>> 2
Mas mesmo que pareça que a atribuição foi bem-sucedida, não foi:
NaN
>> NaN
No modo estrito, você obterá um erro real informando que você não pode atribuir a NaN. Este código usa uma função para que você possa demonstrar o modo estrito no console:
javascript
function badNaN() { "use strict"; window.NaN = 2; }
>> undefined
badNan()
>> Uncaught TypeError: Cannot assign to read only property 'NaN' of object '#'
at badNaN (:1:46)
at :1:1
Este é um exemplo clássico que mostra, embora a ignorância possa ser uma bênção, às vezes é melhor saber se algo dá errado.
Avisa sobre parâmetros duplicados
O exemplo final trata de um recurso pouco conhecido do JavaScript. Você pode ficar surpreso ao saber que os nomes dos parâmetros não precisam ser exclusivos:
function dupeParam(a, a, c) { console.log(a); }
>> undefined
dupeParam(2, 4, 8)
>> 4
Observe que o JavaScript atribui o valor mais recente a um parâmetro duplicado. Agora, esse comportamento não é particularmente útil. Na verdade, seria mais útil para o JavaScript nos dizer que é um erro, e é exatamente isso que o modo estrito faz:
function dupeParam(a, a, c) { "use strict"; }
<< Uncaught SyntaxError: Duplicate parameter name not allowed in this context
Use o modo estrito para obter confiança extra de código
Boas práticas e meios de aplicá-las andam de mãos dadas. Em alguns contextos, como uma função de programação profissional, você desejará exercer o máximo de disciplina possível. Mesmo se você estiver apenas trabalhando em um projeto de código aberto de hobby, o mantenedor pode preferir usar o modo estrito como padrão.
Em última análise, depende de você, mas é útil saber que uma mão amiga está disponível. Como programador, você deve sempre estar atento às melhores práticas e ao que pode fazer para aplicá-las.