Pratiche ottimali JavaScript
- Pagina precedente Guida di stile JS
- Pagina successiva Errori JS
请避免全局变量、new
、===
、eval()
始终声明局部变量
所有在函数中使用的变量应该被声明为局部变量。
局部变量必须通过 var 关键词来声明,否则它们将变成全局变量。
严格模式不允许未声明的变量。
在顶部声明
一项好的编码习惯是把所有声明放在每段脚本或函数的顶部。
I vantaggi di ciò sono:
- 获得更整洁的代码
- 提供了查找局部变量的好位置
- 更容易避免不需要的全局变量
- 减少不需要的重新声明的可能性
// 在顶部声明 var firstName, lastName, price, discount, fullPrice; // 稍后使用 firstName = "Bill"; lastName = "Gates"; price = 19.90; discount = 0.10; fullPrice = price * 100 / discount;
也可以用于循环变量:
// 在顶部声明 var i; // 稍后使用 for (i = 0; i < 5; i++) {
默认地,JavaScript 会将所有声明移至顶部(JavaScript hoisting)。
初始化变量
L'inizializzazione delle variabili quando le dichiari è un'abitudine buona.
I vantaggi di ciò sono:
- Codice più pulito
- Inizializza le variabili in posizioni separate
- Evita valori non definiti
// Dichiarazione e inizializzazione all'inizio var firstName = "", lastName = "", price = 0, discount = 0, fullPrice = 0, myArray = [], myObject = {};
L'inizializzazione delle variabili ci permette di comprendere l'uso previsto e il tipo di dati previsto.
Non dichiarare oggetti numerici, stringhe o booleani
Sempre considera i numeri, le stringhe o i valori booleani come valori primitivi, non oggetti.
Se dichiari questi tipi come oggetti, può rallentare l'esecuzione e produrre effetti collaterali fastidiosi:
Esempio
var x = "Bill"; var y = new String("Bill"); (x === y) // Il risultato è false, perché x è una stringa e y è un oggetto.
O peggio ancora:
Esempio
var x = new String("Bill"); var y = new String("Bill"); (x == y) // Il risultato è false, perché non puoi confrontare gli oggetti.
Non usare new Object()
- Usa {} al posto di new Object()
- Usa "" al posto di new String()
- Usa 0 al posto di new Number()
- Usa false al posto di new Boolean()
- Usa [] al posto di new Array()
- Usa /()/ al posto di new RegExp()
- Usa function (){} al posto di new Function()
Esempio
var x1 = {}; // Nuovo oggetto var x2 = ""; // Nuovo valore stringa primitiva var x3 = 0; // Nuovo valore numerico primitivo var x4 = false; // Nuovo valore booleano primitivo var x5 = []; // Nuovo oggetto array var x6 = /()/; // Nuovo espressione regolare var x7 = function(){}; // Nuovo oggetto funzione
Ricorda la conversione automatica di tipo
Ricorda che i numeri possono essere convertiti accidentalmente in stringhe o NaN
(Non un numero)。
JavaScript è di tipo debole. Le variabili possono contenere diversi tipi di dati e possono cambiare il loro tipo di dati:
Esempio
var x = "Hello"; // typeof x è string x = 5; // Modifica typeof x a number
Se si eseguono operazioni matematiche, JavaScript può convertire i numeri in stringhe:
Esempio
var x = 5 + 7; // x.valueOf() è 12, typeof x è number var x = 5 + "7"; // x.valueOf() è 57, typeof x è string var x = "5" + 7; // x.valueOf() è 57, typeof x è string var x = 5 - 7; // x.valueOf() è -2, typeof x è number var x = 5 - "7"; // x.valueOf() è -2, typeof x è number var x = "5" - 7; // x.valueOf() è -2, typeof x è number var x = 5 - "x"; // x.valueOf() è NaN, typeof x è number
Sottrarre stringhe non produce errori ma restituisce NaN
(Non un numero):
Esempio
"Hello" - "Dolly" // Restituisce NaN
Usa === per confrontare
==
I confronti sempre prima di fare la conversione di tipo (per adattarsi al tipo).
===
Gli operatori forzano la comparazione tra valore e tipo:
Esempio
0 == ""; // true 1 == "1"; // true 1 == true; // true 0 === ""; // false 1 === "1"; // false 1 === true; // false
Utilizzo dei valori di default dei parametri
Se manca un argomento durante la chiamata della funzione, il valore di questo argomento mancante verrà impostato a undefined
。
undefined
Il valore può rompere il tuo codice. Abituarsi a impostare valori di default per i parametri è una buona abitudine.
Esempio
function myFunction(x, y) { if (y === undefined) { y = 0; } }
Leggi questa sezioneParametri delle funzioniQuesta sezione per saperne di più sui parametri delle funzioni.
chiudi il switch con default
Usa default
per chiudere il tuo switch
Espressione. Anche se pensi di non averne bisogno.
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"; }
Evitare l'uso di eval()
eval()
La funzione serve a trattare il testo come codice. In quasi tutti i casi, non è necessario utilizzarla.
Poiché permette l'esecuzione di codice arbitrario, ciò significa anche problemi di sicurezza.
- Pagina precedente Guida di stile JS
- Pagina successiva Errori JS