Gli ultimi tutorial di sviluppo web
 

JavaScript Migliori pratiche


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):

Esempio

"Hello" - "Dolly"    // returns NaN
Prova tu stesso "

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.

Esempio

function myFunction(x, y) {
    if (y === undefined) {
        y = 0;
    }
}
Prova tu stesso "

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.