Strict Mode - JavaScript não é terra sem lei

Postado em: 14/03/2018

Atualizado em: 14/03/2018

O strict mode foi inserido no Ecmascript 5 e age dizendo ao browser para interpretar o código JavaScript de forma mais rigorosa (strict), lançando erros que em modo normal são silenciados. Isso aumenta a qualidade do código e nos previne de bugs futuros.

Ativando Strict Mode

Para ativar o strict mode é bastante simples, basta inserir uma string ‘use strict’ no código. Essa string pode ser colocada no começo do código, ou seja, no escopo global, ou pode ser colocada no início do escopo de uma função, nesse caso, o strict mode só valerá para o código inserido dentro desta função.

strict mode no escopo global:

strict mode no escopo de função:

Para que tenhamos um código mais seguro, o strict mode muda algumas coisas na forma como o browsers executam o código. Vejamos algumas dessas mudanças:

Variáveis não declaradas

Em strict mode utilizar variáveis não declaradas lança um Uncaught Reference Error.

Sem strict mode o erro não ocorre e uma variavel de nome variavel é automaticamente declarada e tem valor dez atribuída a mesma.

Delete

Em strict mode, tentar deletar uma variável retorna um erro, em modo normal esse erro é silenciado. Vejamos o código:

Se o código acima for executado em modo normal, a variável não é deletada, porém, nenhum erro é lançado.

With

A keyword with não existe mais no strict mode, tentar usá-la simplesmente lança um erro de sintaxe:

Parâmetros duplicados

No modo strict, parâmetros duplicados também lança um erro de sintaxe.

Atribuições sem efeito

Em modo não strict, atribuições que possam vir a falhar por algum motivo, não lançam qualquer erro. Em modo strict isso não acontece mais. Qualquer um dos exemplos abaixo lançam um Type Error.

Proibido definir propriedades em valores primitivos

Em modo não strict, fazer coisas absurdas como as ilustradas abaixo não emitiam qualquer erro.

Palavras reservadas

Em modo strict, eval e arguments, se tornam palavras reservadas, portanto não é possível declarar variáveis com esses nomes.

Variáveis definidas em eval

Em modo não strict, variáveis definidas dentro de eval são adicionadas ao escopo global. Em modo strict, se tentarmos acessar, no escopo global, uma variável definida em eval, um erro será lançado:

This

Em modo não strict, o valor do this sempre será tranformado em um objeto, isso não ocorre em modo strict. Veja alguns exemplos: