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


Práticas recomendadas de JavaScript


Evite variáveis ​​globais, evite new, evite ==, eviteeval()


Evite variáveis ​​globais

Minimize o uso de variáveis ​​globais.

Isso inclui todos os tipos de dados, objetos e funções.

Variáveis ​​e funções globais podem ser substituídas por outros scripts.

Em vez disso, use variáveis ​​locais e aprenda a usar closures .


Sempre Declare Variáveis ​​Locais

Todas as variáveis ​​usadas em uma função devem ser declaradas como variáveis locais .

As variáveis ​​locais devem ser declaradas com a var palavra-chave ou a palavra- letchave, ou a palavra- constchave, caso contrário, elas se tornarão variáveis ​​globais.

O modo estrito não permite variáveis ​​não declaradas.


Declarações no topo

É uma boa prática de codificação colocar todas as declarações no início de cada script ou função.

Isso vai:

  • Dê um código mais limpo
  • Forneça um único local para procurar variáveis ​​locais
  • Tornar mais fácil evitar variáveis ​​globais indesejadas (implícitas)
  • Reduza a possibilidade de novas declarações indesejadas
// Declare at the beginning
let firstName, lastName, price, discount, fullPrice;

// Use later
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price - discount;

Isso também vale para variáveis ​​de loop:

for (let i = 0; i < 5; i++) {


Inicializar variáveis

É uma boa prática de codificação inicializar variáveis ​​ao declará-las.

Isso vai:

  • Dê um código mais limpo
  • Forneça um único local para inicializar variáveis
  • Evite valores indefinidos
// Declare and initiate at the beginning
let firstName = "",
let lastName = "",
let price = 0,
let discount = 0,
let fullPrice = 0,
const myArray = [],
const myObject = {};

A inicialização de variáveis ​​fornece uma ideia do uso pretendido (e do tipo de dados pretendido).


Declare objetos com const

Declarar objetos com const evitará qualquer mudança acidental de tipo:

Exemplo

let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Changes object to string

const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Not possible

Declare Arrays com const

Declarar arrays com const evitará qualquer mudança acidental de tipo:

Exemplo

let cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Changes array to number

const cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Not possible

Não use new Object()

  • Usar ""em vez denew String()
  • Usar 0em vez denew Number()
  • Usar falseem vez denew Boolean()
  • Usar {}em vez denew Object()
  • Usar []em vez denew Array()
  • Usar /()/em vez denew RegExp()
  • Usar function (){}em vez denew Function()

Exemplo

let x1 = "";             // new primitive string
let x2 = 0;              // new primitive number
let x3 = false;          // new primitive boolean
const x4 = {};           // new object
const x5 = [];           // new array object
const x6 = /()/;         // new regexp object
const x7 = function(){}; // new function object

Cuidado com as conversões automáticas de tipo

JavaScript é livremente tipado.

Uma variável pode conter todos os tipos de dados.

Uma variável pode alterar seu tipo de dados:

Exemplo

let x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number

Esteja ciente de que os números podem acidentalmente ser convertidos em strings ou NaN(Not a Number).

Ao fazer operações matemáticas, o JavaScript pode converter números em strings:

Exemplo

let x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
let x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
let x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
let x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
let x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
let x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
let x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number

Subtrair uma string de uma string não gera um erro, mas retorna NaN(Not a Number):

Exemplo

"Hello" - "Dolly"    // returns NaN

Usar === Comparação

O ==operador de comparação sempre converte (em tipos correspondentes) antes da comparação.

O ===operador força a comparação de valores e tipo:

Exemplo

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false

Usar padrões de parâmetro

Se uma função for chamada com um argumento ausente, o valor do argumento ausente será definido como undefined.

Valores indefinidos podem quebrar seu código. É um bom hábito atribuir valores padrão aos argumentos.

Exemplo

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}

ECMAScript 2015 permite parâmetros padrão na definição da função:

function (a=1, b=1) { /*function code*/ }

Leia mais sobre parâmetros e argumentos de função em Parâmetros de Função


Encerre seus switches com padrões

Sempre termine suas switchdeclarações com um default. Mesmo que você ache que não há necessidade disso.

Exemplo

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
    day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
    break;
  default:
    day = "Unknown";
}

Evite Number, String e Boolean como Objetos

Sempre trate números, strings ou booleanos como valores primitivos. Não como objetos.

Declarar esses tipos como objetos diminui a velocidade de execução e produz efeitos colaterais desagradáveis:

Exemplo

let x = "John";             
let y = new String("John");
(x === y) // is false because x is a string and y is an object.

Ou ainda pior:

Exemplo

let x = new String("John");             
let y = new String("John");
(x == y) // is false because you cannot compare objects.

Evite usar eval()

A eval()função é usada para executar texto como código. Em quase todos os casos, não deve ser necessário usá-lo.

Por permitir a execução de código arbitrário, também representa um problema de segurança.