Por que usar “use strict”?

strict-mode

Você já deve ter visto a diretiva “use strict” no início de vários arquivos JavaScript, e já deve ter até usado em seus programas sem saber para que ela serve. Alguns pensam que ele serve para esconder os códigos JavaScript do usuário, mas não é. Vejamos…

O que é ‘use strict’?

use strict é uma funcionalidade do ECMAScript a partir de sua versão 5, uma expressão literal ignorada por versões anteriores do ECMAScript, e do JavaScript a baixo da 1.8.5. O que é ela faz basicamente é melhorar a qualidade do código, pois chama exceções quando usamos variáveis não declaradas, por exemplo. Ou seja, o código é executado de forma mais rigorosa, por isso é chamado de strict mode ou modo restrito.

Você também não consegue usar palavras reservadas do JavaScript no strict mode, como por exemplo nomear uma variável como eval, e não consegue usar recursos obsoletos ou depreciados.

No exemplo a seguir, você consegue usar a variável name sem ter declarado antes:

Mas se estiver usando o modo restrito receberá um erro de exceção.

Usando

Para usar é preciso declara ‘use strict’;  no início do arquivo ou função, antes de qualquer coisa, exceto espaços ou comentários. Por exemplo, antes da diretiva você não pode declarar uma variável, pois se fizer isso, o mode strict não será habilitado.

Note que no segundo exemplo usamo uma linha em branco e um comentário antes da declaração da diretiva use strict, o que não impede que ela funcione. É importante notar também que você pode habilitar o mode restrito para todo o arquivo ou apenas para determinadas funções, como fizemos no exemplo acima.

Palavras restritas

Como falei mais acima as palavras reservadas do JavaScript se tornam restritas quando usamos strict mode, não podendo ser usadas como identificadores e nem receber atribuição de valores, como no exemplo a seguir:

As palavras reservadas da linguagem, segundo W3C School são

abstract arguments boolean break byte
case catch char class* const
continue debugger default delete do
double else enum* eval export*
extends* false final finally float
for function goto if implements
import* in instanceof int interface
let long native new null
package private protected public return
short static super* switch synchronized
this throw throws transient true
try typeof var void volatile
while with yield

E, objetos propriedades e métodos:

Array Date eval function hasOwnProperty
Infinity isFinite isNaN isPrototypeOf length
Math NaN name Number Object
prototype String toString undefined valueOf

Mudanças no eval()

Quem usa JavaScript há muito tempo deve lembrar que, antes que os métodos JSON fossem nativamente inseridos nos navegadores, o método eval() era usado para criar novos objetos a partir de strings.

Fora do strict mode o eval() é capaz de adicionar variáveis ao contexto, e atribuir valores às que já existem. Dentro do strict mode este método tem o seu próprio contexto, e não é capaz de alterar nada fora dele. No exemplo a seguir usamos o eval para criar e atribuir um valor a uma variável, no strict mode, quando tentamos dar o alert na variável irá dar erro, pois a variável name não exite no contexto global, mas apenas no do eval();

Por que usar?

Pelo bem da legibilidade do seu código você deve usar o strict mode, além de evitar problemas futuros com novas versões do JavaScript ou ECMAScript. Isso irá lhe ajudar a detectar erros em seu código mais facilmente, evitar que você use palavras reservadas, subscrevendo funções do JavaScript, e que você use variáveis não declaradas.

Sobre o autor:

Graduado em Análise e Desenvolvimento de Sistemas - FLS; Desenvolvedor Full-stack na UniLeão; Revisor de conteúdo do site Clube dos Geeks, católico, gosto de ler e escrever.

Postagens relacionadas:

Deixe uma resposta

Seu e-mail não será publicado.