Evitar variáveis globais, evite new , evite == , evite eval()
Evitar variáveis globais
Minimizar o uso de variáveis globais.
Isso inclui tipos todos os dados, objetos e funções.
Variáveis globais e funções podem ser substituídos por outros scripts.
Use variáveis locais em vez disso, e aprender como usar encerramentos .
Sempre declarar variáveis locais
Todas as variáveis usadas em uma função devem ser declarados como variáveis locais.
As variáveis locais devem ser declarados com o var palavra-chave, caso contrário, eles vão se tornar variáveis globais.
modo estrito não permite variáveis não declaradas.
Declarações sobre Top
É uma boa prática de codificação para colocar todas as declarações na parte superior de cada script ou função.
Isso vai:
- Dê um código mais limpo
- Fornecer um único lugar para olhar para as variáveis locais
- Torná-lo mais fácil evitar (implícita) variáveis globais indesejados
- Reduzir a possibilidade de re-declarações indesejados
// Declare at the beginning
var firstName, lastName, price, discount, fullPrice;
// Use later
firstName = "John";
lastName = "Doe";
price = 19.90;
discount = 0.10;
fullPrice = price * 100 / discount;
Isto também vale para variáveis de loop:
// Declare at the beginning
var i;
// Use later
for (i = 0; i < 5; i++)
{
Por padrão, o JavaScript move todas as declarações até o topo (içar JavaScript).
inicializar variáveis
É uma boa prática de codificação para inicializar variáveis quando você declará-los.
Isso vai:
- Dê um código mais limpo
- Fornecer um único local para inicializar variáveis
- Evite valores indefinidos
// Declare and initiate at the beginning
var firstName = "",
lastName
= "",
price = 0,
discount = 0,
fullPrice
= 0,
myArray = [],
myObject = {};
Inicialização de variáveis fornece uma ideia da utilização pretendida (e destinados tipo de dados).
Nunca Declare Number, String, ou objetos booleanos
Sempre trate números, strings, ou booleans como valores primitivos. Não como objetos.
Declarar esses tipos como objetos, retarda a velocidade de execução, e produz efeitos colaterais desagradáveis:
Exemplo
var x = "John";
var y = new String("John");
(x === y) // is false because x is a string and y is an object.
Tente você mesmo " Ou ainda pior:
Exemplo
var x = new String("John");
var y = new String("John");
(x == y) // is false because you cannot compare objects.
Tente você mesmo " Não use new Object()
- Use {} em vez de new Object()
- Use "" em vez de new String()
- Use 0 em vez de new Number()
- Use false em vez de new Boolean()
- Use [] em vez de new Array()
- Use /()/ , em vez de new RegExp()
- Use function (){} em vez de new Function()
Exemplo
var x1 = {}; // new object
var x2 = ""; // new primitive string
var x3 = 0; // new primitive number
var x4 = false; // new primitive boolean
var x5 = []; // new array object
var x6 = /()/; // new regexp object
var x7 = function(){}; // new function object
Tente você mesmo " Cuidado com tipo automático Conversões
Tenha em atenção que os números podem acidentalmente ser convertido em cordas ou NaN (não um número).
JavaScript é vagamente digitado. Uma variável pode conter diferentes tipos de dados, e uma variável pode mudar seu tipo de dados:
Exemplo
var x = "Hello"; // typeof x is a string
x = 5; // changes typeof x to a number
Tente você mesmo " Ao fazer operações matemáticas, JavaScript pode converter números para strings:
Exemplo
var x = 5 + 7; // x.valueOf() is 12, typeof x is a number
var x = 5 + "7"; // x.valueOf() is 57, typeof x is a string
var x = "5" + 7; // x.valueOf() is 57, typeof x is a string
var x = 5 - 7; // x.valueOf() is -2, typeof x is a number
var x = 5 - "7"; // x.valueOf() is -2, typeof x is a number
var x = "5" - 7; // x.valueOf() is -2, typeof x is a number
var x = 5 - "x"; // x.valueOf() is NaN, typeof x is a number
Tente você mesmo " Subtraindo uma corda de uma cadeia, não gera um erro, mas retorna NaN (não um número):
Use === Comparação
O == operador de comparação sempre converte (a tipos correspondentes) antes de comparação.
O === comparação forças operador de valores e digite:
Exemplo
0 == ""; // true
1 == "1"; // true
1 == true; // true
0 === ""; // false
1 === "1"; // false
1 === true;
// false
Tente você mesmo " Usar padrões de parâmetro
Se uma função é chamada com um argumento ausente, o valor do argumento em falta é definido como undefined .
valores indefinidos pode quebrar seu código. É um bom hábito de atribuir valores padrão para argumentos.
Leia mais sobre os parâmetros de função e argumentos em Parâmetros de Função
Termine o seu Switches com Padrões
Sempre terminar suas declarações switch com um padrão. Mesmo se você acha que não há necessidade para isso.
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";
}
Tente você mesmo " Evite usar eval()
O eval() função é usada para executar o texto como código. Em quase todos os casos, não deve ser necessário utilizá-lo.
Porque permite que código arbitrário seja executado, também representa um problema de segurança.