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:

function setName(x){
   name = x;
}

setName("JAYR")

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

'use strict';
function setName(x){
   name = x; //Error: assignment to undeclared variable name
}

setName("JAYR")

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.

function setName(x){
   var a = 1;
   'use strict'; // Não será habilitado
   name = x; //Nenhum erro
}


function setName(x){

   //função set name
   'use strict'; // Será habilitado
   name = x; //Error: assignment to undeclared variable name
}

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:

// Erro "strict mode"
function() {
  "use strict";
  eval = 'name';
}

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();

"use strict";
eval('var name="Jayr";');
alert(name); //vai retornar erro

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.

Jayr Alencar

Doutorando em Ciências da Computação no Centro de Informática da Universidade Federal do Pernambuco (CIn - UFPE); Mestre pela mesma instituição; Formado em Análise e Desenvolvimento de Sistemas; Católico; Fã de O Senhor do Anéis.

One thought on “Por que usar “use strict”?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77

Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77