"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
x = 3.14; // Isto causará um erro porque x não é declarado
Try it Yourself ”
Exemplo
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):
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:
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:
x = {p1:10, p2:20}; // Isto causará um erro
Try it Yourself “
Deletar uma variável (ou objecto) não é permitido.
var x = 3.14;
delete x; // Isto causará um erro
Try it Yourself “
Delete uma função não é permitida.
função x(p1, p2) {};
delete x; // Isto causará um erro
Try it Yourself “
Duplicar um nome de parâmetro não é permitido:
função x(p1, p1) {}; // Isto causará um erro
Tente você mesmo “
Ligações numéricas octais não são permitidas:
var x = 010; // Isto causará um erro
Try it Yourself “
Os caracteres de fuga octais não são permitidos:
var x = “\010”; // Isto causará um erro
Try it Yourself “
p>Não é permitido escrever para uma propriedade só de leitura:
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:
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:
delete Object.prototipo; // Isto causará um erro
Tente você mesmo “
A palavra eval
não pode ser usada como variável:
var eval = 3.14; // Isto causará um erro
Tente você mesmo “
A palavra arguments
não pode ser usada como uma variável:
var argumentos = 3.14; // Isto causará um erro
Tente você mesmo “
O with
declaração não é permitida:
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:
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):
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
- static
- yield
li>public
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.