"use strict"; Define que o código JavaScript deve ser executado em "modo estrito".
O "use strict" Directiva
O "use strict" directiva é novo no JavaScript 1.8.5 (ECMAScript version 5) .
Não é uma declaração, mas uma expressão literal, ignorado por versões anteriores do JavaScript.
O objectivo do "use strict" serve para indicar que o código deve ser executado em "modo estrito".
Com o modo estrito, não é possível, por exemplo, usar variáveis não declaradas.
modo estrito é suportado em:
IE a partir da versão 10. Firefox a partir da versão 4.
Chrome a partir da versão 13. Safari a partir da versão 5.1.
Opera a partir da versão 12.
Declarando Modo estrito
Modo estrito é declarado pela adição de "use strict"; para o início de um script ou uma função.
Declarou no início de um script, tem escopo global (todo o código no script será executado no modo estrito):
Exemplo
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
Tente você mesmo " Declarada dentro de uma função, tem âmbito local (apenas o código dentro da função está no modo estrito):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14;
// This will cause an error (y is not defined)
}
Tente você mesmo " O "use strict"; Sintaxe
A sintaxe, para declarar modo estrito, foi projetado para ser compatível com versões mais antigas do JavaScript.
Compilando um literal numérico (4 + 5;) ou um string literal ("John Doe";) em um programa JavaScript não tem efeitos colaterais. Ele simplesmente compila a uma variável inexistente e morre.
Assim, "use strict" ; só importa a novos compiladores que "entender" o significado dela.
Por Modo estrito?
modo estrito torna mais fácil para escrever "seguro" JavaScript.
alterações de modo rigorosos previamente aceite "mau sintaxe" em erros reais.
Como exemplo, em JavaScript normal, erroneamente um nome de variável cria uma nova variável global. No modo estrito, isto irá lançar um erro, o que torna impossível para criar acidentalmente uma variável global.
Em JavaScript normal, um desenvolvedor não vai receber qualquer feedback de erro atribuição de valores a propriedades não-graváveis.
No modo estrito, qualquer atribuição a uma propriedade não-gravável, uma propriedade só de getter, uma propriedade não-existente, uma variável não-existente, ou um objeto não-existente, irá lançar um erro.
Não se permitem no modo estrito
Usando uma variável, sem declará-lo, não é permitido:
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
Objetos são variáveis também.
Usando um objeto, sem declará-lo, não é permitido:
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
Exclusão de uma variável (ou objeto) não é permitido.
"use strict";
var x = 3.14;
delete x; // This
will cause an error
A exclusão de uma função não é permitido.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Duplicando um nome de parâmetro não é permitido:
"use strict";
function x(p1, p1) {}; // This will cause an error
Octal literais numéricos não são permitidos:
"use strict";
var x = 010; // This
will cause an error
Escapam caracteres não são permitidos:
"use strict";
var x = \010; // This will cause an error
Escrevendo para uma propriedade só de leitura não é permitido:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Escrevendo para uma propriedade somente get não é permitido:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Excluindo uma propriedade undeletable não é permitido:
"use strict";
delete Object.prototype; // This will cause an error
A cadeia "Eval" não pode ser usada como uma variável:
"use strict";
var eval = 3.14; // This will cause an error
A cadeia "argumentos" não pode ser usado como uma variável:
"use strict";
var arguments = 3.14; // This will cause an error
O com a declaração não é permitido:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Por razões de segurança, eval() não tem permissão para criar variáveis no âmbito do qual ele foi chamado:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
Em chamadas de função como f() , a este valor foi objeto global. No modo estrito, é agora indefinido.
Prova futuro!
Futuros palavras-chave reservadas não são permitidos no modo estrito. Esses são:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
Cuidado!
Cuidado!
O "use strict" directiva só é reconhecido no início de um script ou uma função.