Articles

JavaScript Use Strict

Posted on

"use strict"; Define que o código JavaScript deve ser executado em “modo strict”.

A directiva “usar estrito”

A directiva "use strict" foi nova no ECMAScript versão 5.

Não é uma declaração, mas uma expressão literal, ignorada pelas versões anteriores do JavaScript.

O objectivo de "use strict" é indicar que o código deve ser executado em “modo estrito”.

Com modo estrito, não se pode, por exemplo, utilizar variáveis não declaradas.

Todos os browsers modernos suportam “use strict”, excepto o Internet Explorer 9 e inferior:

Directiva
“use strict” 13.0 10.0 4.0 6.0 12.1

Os números na tabela especificam a primeira versão do navegador que suporta totalmente a directiva.

Pode usar o modo estrito em todos os seus programas. Ajuda-o a escrever código mais limpo, tal como impedi-lo de utilizar variáveis não declaradas.

"use strict" é apenas uma string, por isso o IE 9 não irá lançar um erro, mesmo que não o compreenda.

Declarar modo estrito

O modo estrito é declarado adicionando “use strict”; ao início de um script ou de uma função.

Declarado no início de um script, tem alcance global (todo o código no script será executado em modo estrito):

Exemplo

“use strict”;
x = 3.14; // Isto causará um erro porque x não é declarado
Try it Yourself ”

Exemplo

“use strict”;
myFunction();
function myFunction() {
y = 3.14; // Isto também causará um erro porque y não é declarado
}

Try it Yourself ”

Declarado dentro de uma função, tem alcance local (apenas o código dentro da função está em modo estrito):

x = 3.14; // Isto não causará um erro.
myFunction();
function myFunction() {
“use strict”;
y = 3.14; // Isto causará um erro
}
br>/div> Experimente você mesmo ”

O “use strict”; Syntax

A sintaxe, para declarar o modo strict, foi concebida para ser compatível com versões mais antigas do JavaScript.

Compilar uma literal numérica (4 + 5;) ou uma literal de corda (“John Doe”;) num programa de JavaScript não tem efeitos secundários. Compila simplesmente uma variável não existente e morre.

Então "use strict"; só interessa a novos compiladores que “entendam” o significado da mesma.

Porquê o Modo Estrito?

O modo restrito facilita a escrita de JavaScript.

O modo restrito muda a “sintaxe má” anteriormente aceite para erros reais.

Como exemplo, em JavaScript normal, escrever um nome de variável de forma errada cria uma nova variável global. No modo estrito, isto irá lançar um erro, tornando impossível criar acidentalmente uma variável global.

Em JavaScript normal, um programador não receberá qualquer feedback de erro atribuindo valores a propriedades não escrevíveis.

No modo estrito, qualquer atribuição a uma propriedade não gravável, a uma propriedade apenas do getter, a uma propriedade inexistente, a uma variável inexistente, ou a um objecto inexistente, irá lançar um erro.

Não permitido em modo estrito

Utilizar uma variável, sem a declarar, não é permitido:

“use strict”;
x = 3.14; // Isto causará um erro

Tente “

p>Objectos também são variáveis.

Utilizar um objecto, sem o declarar, não é permitido:

“use strict”;
x = {p1:10, p2:20}; // Isto causará um erro

Try it Yourself “

Deletar uma variável (ou objecto) não é permitido.

“use strict”;
var x = 3.14;
delete x; // Isto causará um erro

Try it Yourself “

Delete uma função não é permitida.

“use strict”;
função x(p1, p2) {};
delete x; // Isto causará um erro

Try it Yourself “

Duplicar um nome de parâmetro não é permitido:

“use strict”;
função x(p1, p1) {}; // Isto causará um erro

Tente você mesmo “

Ligações numéricas octais não são permitidas:

“use strict”;
var x = 010; // Isto causará um erro

Try it Yourself “

Os caracteres de fuga octais não são permitidos:

“use strict”;
var x = “\010”; // Isto causará um erro

Try it Yourself “

p>Não é permitido escrever para uma propriedade só de leitura:

“use strict”;
var obj = {};
Object.defineProperty(obj, “x”, {value:0, writable:false});
obj.x = 3.14; // Isto causará um erro

Try it Yourself “

Não é permitida a escrita para uma propriedade get-only:

“use strict”;
var obj = {get x() {return 0} };
obj.x = 3.x = 3.14; // Isto causará um erro

Try it Yourself “

Deleting an undeletable property is not allowed:

“use strict”;
delete Object.prototipo; // Isto causará um erro

Tente você mesmo “

A palavra eval não pode ser usada como variável:

“use strict”;
var eval = 3.14; // Isto causará um erro

Tente você mesmo “

A palavra arguments não pode ser usada como uma variável:

“use strict”;
var argumentos = 3.14; // Isto causará um erro

Tente você mesmo “

O with declaração não é permitida:

“use strict”;
with (Math){x = cos(2)}; // Isto causará um erro

Try it Yourself “

Por razões de segurança, eval() não é permitido criar variáveis no âmbito a partir do qual foi chamado:

“use strict”;
eval (“var x = 2”);
alert (x); // Isto causará um erro

Try it Yourself “

The this keyword in functions behaves different in strict mode.

O this a palavra-chave refere-se ao objecto que chamou a função.

Se o objecto não for especificado, as funções em modo estrito retornarão undefined e as funções em modo normal retornarão o objecto global (janela):

“use strict”;
function myFunction() {
alert(this); // alertará “undefined”
}
myFunction();

Try it Yourself “

Future Proof!

Palavras-chave reservadas para futuras versões JavaScript NÃO podem ser usadas como nomes de variáveis em modo estrito.

Estes são:

  • implements
  • interface
  • let
  • package
  • private
  • proteger
  • li>public

  • static
  • yield
“use strict”;
var public = 1500; // Isto causará um erro

Tente você mesmo “

Watch Out!

A directiva “use strict” só é reconhecida no início de um script ou de uma função.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *