Evitare le variabili globali, evitare di new , evitare di == , evitare di eval()
Evitare di variabili globali
Ridurre al minimo l'uso di variabili globali.
Questo include i tipi di tutti i dati, oggetti e funzioni.
variabili e funzioni globali possono essere sovrascritti da altri script.
Utilizzare le variabili locali, invece, e imparare a utilizzare le chiusure .
Dichiarare sempre variabili locali
Tutte le variabili utilizzate in una funzione devono essere dichiarati come variabili locali.
Le variabili locali devono essere dichiarate con la var parola chiave, altrimenti diventeranno variabili globali.
modalità rigorosa non consente variabili non dichiarate.
Dichiarazioni su Top
Si tratta di una buona pratica di codifica di mettere tutte le dichiarazioni nella parte superiore di ogni script o funzione.
Questo sarà:
- Comunicare il codice più pulito
- Fornire un unico posto per cercare le variabili locali
- Rendere più facile da evitare (implicite) variabili globali indesiderati
- Ridurre la possibilità di re-indesiderate dichiarazioni
// 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;
Questo vale anche per le variabili di loop:
// Declare at the beginning
var i;
// Use later
for (i = 0; i < 5; i++)
{
Per impostazione predefinita, JavaScript sposta tutte le dichiarazioni verso l'alto (sollevamento JavaScript).
inizializzare le variabili
Si tratta di una buona pratica di codifica per inizializzare le variabili quando vengono dichiarate.
Questo sarà:
- Comunicare il codice più pulito
- Fornire un unico luogo per inizializzare le variabili
- Evitare valori non definiti
// Declare and initiate at the beginning
var firstName = "",
lastName
= "",
price = 0,
discount = 0,
fullPrice
= 0,
myArray = [],
myObject = {};
L'inizializzazione delle variabili fornisce un'idea della destinazione d'uso (e destinato tipo di dati).
Mai Dichiarare numero, una stringa o oggetti booleani
Trattare sempre i numeri, stringhe o booleani come valori primitivi. Non come oggetti.
Dichiarare questi tipi come oggetti, rallenta la velocità di esecuzione, e produce fastidiosi effetti collaterali:
Esempio
var x = "John";
var y = new String("John");
(x === y) // is false because x is a string and y is an object.
Prova tu stesso " O ancora peggio:
Esempio
var x = new String("John");
var y = new String("John");
(x == y) // is false because you cannot compare objects.
Prova tu stesso " Non usare new Object()
- Utilizzare {} invece di new Object()
- Utilizzare "" invece di new String()
- Utilizzare 0 invece di new Number()
- Utilizzare false invece di new Boolean()
- Usare [] invece di new Array()
- Utilizzare /()/ invece di new RegExp()
- Utilizzare function (){} invece di new Function()
Esempio
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
Prova tu stesso " Attenzione di tipo automatico Conversioni
Attenzione che i numeri possono accidentalmente essere convertiti in stringhe o NaN (Not a Number).
è liberamente digitato JavaScript. Una variabile può contenere diversi tipi di dati, e una variabile può cambiare il suo tipo di dati:
Esempio
var x = "Hello"; // typeof x is a string
x = 5; // changes typeof x to a number
Prova tu stesso " Nel fare operazioni matematiche, JavaScript può convertire i numeri in stringhe:
Esempio
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
Prova tu stesso " Sottraendo una stringa da una stringa, non genera un errore, ma restituisce NaN (Not a Number):
Utilizzare === Confronto
Il == operatore di confronto converte sempre (per i tipi di corrispondenza) prima del confronto.
Il === confronto forze operatore di valori e di tipo:
Esempio
0 == ""; // true
1 == "1"; // true
1 == true; // true
0 === ""; // false
1 === "1"; // false
1 === true;
// false
Prova tu stesso " Utilizzare impostazioni predefinite dei parametri
Se una funzione viene chiamata con un argomento mancante, il valore dell'argomento mancante viene impostato su undefined .
valori non definiti possono rompere il codice. E 'una buona abitudine di assegnare valori di default per gli argomenti.
Per saperne di più parametri di funzione e gli argomenti a parametri di funzione
Concludete la Interruttori con impostazioni predefinite
finire sempre le istruzioni switch con un default. Anche se pensate che non vi è alcuna necessità di esso.
Esempio
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";
}
Prova tu stesso " Evitare di utilizzare eval()
Il eval() funzione viene utilizzata per eseguire il testo come codice. In quasi tutti i casi, non dovrebbe essere necessario utilizzare.
Perché permette di codice arbitrario da eseguire, rappresenta anche un problema di sicurezza.