Tutorial de JS

JS HOME Introdução JS JS Para onde Saída JS Declarações JS Sintaxe JS Comentários JS Variáveis ​​JS JS Let JS Const Operadores JS JS Aritmética Atribuição de JS Tipos de dados JS Funções JS Objetos JS Eventos JS Strings JS Métodos de string JS Pesquisa de String JS Modelos de String JS Números JS Métodos de número JS Matrizes JS Métodos de matriz JS Classificação de matriz JS Iteração de matriz JS Const da matriz JS Datas JS Formatos de data JS Métodos de obtenção de data JS Métodos de conjunto de datas JS JS Math JS Aleatório JS Booleanos Comparações JS Condições JS Interruptor JS Circuito JS para JS Loop Para Entrada JS Loop Para De JS Loop Enquanto Quebra de JS Iteráveis ​​JS Conjuntos JS Mapas JS Tipo JS de Conversão de tipo JS JS bit a bit JS RegExp Erros JS Escopo JS Içamento JS Modo estrito JS JS esta palavra-chave Função de seta JS Classes JS JS JSON Depuração JS Guia de estilo JS Práticas recomendadas de JS Erros de JS Desempenho JS Palavras reservadas JS

Versões JS

Versões JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge Histórico de JS

Objetos JS

Definições de objeto Propriedades do objeto Métodos de objeto Exibição de objetos Acessadores de objetos Construtores de objetos Protótipos de Objetos Iteráveis ​​de objeto Conjuntos de objetos Mapas de objetos Referência do objeto

Funções JS

Definições de função Parâmetros de função Invocação de função Chamada de Função Função Aplicar Fechamentos de Função

Classes JS

Introdução à aula Herança de classe Classe Estática

JS Assíncrono

Retornos de chamada JS JS Assíncrono Promessas JS JS Async/Aguardar

JS HTML DOM

Introdução ao DOM Métodos DOM Documento DOM Elementos DOM HTML DOM Formulários DOM CSS DOM Animações DOM Eventos DOM Ouvinte de eventos DOM Navegação DOM Nós DOM Coleções DOM Listas de nós DOM

BOM do navegador JS

Janela JS Tela JS Localização JS Histórico de JS Navegador JS Alerta pop-up JS Temporização JS Cookies JS

APIs da Web JS

Introdução à API da Web API de formulários da Web API de histórico da web API de armazenamento da Web API do trabalhador da Web API de busca da Web API de geolocalização da Web

JS AJAX

Introdução AJAX AJAX XML Http Solicitação AJAX Resposta AJAX Arquivo XML AJAX PHP AJAX ASP AJAX Banco de dados AJAX Aplicativos AJAX Exemplos AJAX

JS JSON

Introdução JSON Sintaxe JSON JSON x XML Tipos de dados JSON Análise JSON JSON Stringify Objetos JSON Matrizes JSON Servidor JSON JSON PHP HTML JSON JSON JSONP

JS x jQuery

Seletores jQuery HTML jQuery jQuery CSS jQuery DOM

Gráficos JS

Gráficos JS Tela JS JS Plotly JS Chart.js JS Google Chart JS D3.js

Exemplos JS

Exemplos JS JS HTML DOM Entrada HTML JS Objetos HTML JS Eventos HTML JS Navegador JS Editor JS Exercícios JS Teste JS Certificado JS

Referências JS

Objetos JavaScript Objetos HTML DOM


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 evalnão pode ser usada como variável:

"use strict";
let eval = 3.14;         // This will cause an error

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

"use strict";
let arguments = 3.14;    // This will cause an error

A withdeclaraçã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 thispalavra-chave em funções se comporta de maneira diferente no modo estrito.

A thispalavra-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 undefinede 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.