JavaScript Uso estrito
"use strict";
Define que o código JavaScript deve ser executado em "modo estrito".
A diretiva "usar estrita"
A "use strict"
diretiva era nova no ECMAScript versão 5.
Não é uma declaração, mas uma expressão literal, ignorada por versões anteriores do JavaScript.
O objetivo de "use strict"
é indicar que o código deve ser executado em "modo estrito".
Com o modo estrito, você não pode, por exemplo, usar variáveis não declaradas.
Todos os navegadores modernos suportam "use strict", exceto Internet Explorer 9 e inferior:
Directive | |||||
---|---|---|---|---|---|
"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 diretiva.
Você pode usar o modo estrito em todos os seus programas. Ele ajuda você a escrever um código mais limpo, como impedir que você use variáveis não declaradas.
"use strict"
é apenas uma string, então o IE 9 não lançará um erro mesmo que não o entenda.
Declarando o modo estrito
O modo estrito é declarado adicionando "use strict"; para o início de um script ou uma função.
Declarado no início de um script, tem escopo global (todo o código no script será executado em modo estrito):
Exemplo
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Exemplo
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Declarado dentro de uma função, tem escopo local (somente o código dentro da função está em modo estrito):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
O "uso estrito"; Sintaxe
A sintaxe, para declarar o modo estrito, foi projetada para ser compatível com versões mais antigas do JavaScript.
Compilar um literal numérico (4 + 5;) ou um literal de string ("John Doe";) em um programa JavaScript não tem efeitos colaterais. Ele simplesmente compila para uma variável não existente e morre.
Portanto "use strict";
, só importa para novos compiladores que "entendem" o significado disso.
Por que o modo estrito?
O modo estrito torna mais fácil escrever JavaScript "seguro".
O modo estrito altera a "sintaxe incorreta" anteriormente aceita em erros reais.
Como exemplo, em JavaScript normal, digitar incorretamente um nome de variável cria uma nova variável global. No modo estrito, isso gerará um erro, impossibilitando a criação acidental de uma variável global.
Em JavaScript normal, um desenvolvedor não receberá nenhum feedback de erro atribuindo valores a propriedades não graváveis.
No modo estrito, qualquer atribuição a uma propriedade não gravável, uma propriedade somente getter, uma propriedade inexistente, uma variável inexistente ou um objeto inexistente gerará um erro.
Não permitido no modo estrito
Usar uma variável, sem declará-la, não é permitido:
"use strict";
x = 3.14; // This will cause an error
Objetos também são variáveis.
Usar um objeto, sem declará-lo, não é permitido:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
A exclusão de uma variável (ou objeto) não é permitida.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
A exclusão de uma função não é permitida.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Não é permitido duplicar um nome de parâmetro:
"use strict";
function x(p1, p1) {}; // This will cause an error
Literais numéricos octais não são permitidos:
"use strict";
let x = 010; // This
will cause an error
Caracteres de escape octais não são permitidos:
"use strict";
let x = "\010"; // This will cause an error
Não é permitido gravar em uma propriedade somente leitura:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Não é permitido gravar em uma propriedade get-only:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
A exclusão de uma propriedade que não pode ser excluída não é permitida:
"use strict";
delete Object.prototype; // This will cause an error
A palavra eval
não pode ser usada como variável:
"use strict";
let eval = 3.14; // This will cause an error
A palavra arguments
não pode ser usada como variável:
"use strict";
let arguments = 3.14; // This will cause an error
A with
declaração não é permitida:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Por questões de segurança, eval()
não é permitido criar variáveis no escopo do qual foi chamado:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
A this
palavra-chave em funções se comporta de maneira diferente no modo estrito.
A this
palavra-chave refere-se ao objeto que chamou a função.
Se o objeto não for especificado, as funções no modo estrito retornarão undefined
e as funções no modo normal retornarão o objeto global (janela):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
À prova de futuro!
Palavras-chave reservadas para futuras versões do JavaScript NÃO podem ser usadas como nomes de variáveis no modo estrito.
Estes são:
- implementa
- interface
- deixei
- pacote
- privado
- protegido
- público
- estático
- colheita
"use strict";
let public = 1500; // This will cause an error
Atenção!
A diretiva "use strict" só é reconhecida no início de um script ou função.