Acest capitol subliniază câteva greșeli comune JavaScript.
Utilizarea Accidental operatorul de atribuire
Programele JavaScript pot genera rezultate neașteptate în cazul în care un programator utilizează accidental un operator de atribuire (=) , în loc de un operator de comparare (==) , într - o declarație , dacă.
Aceasta în if în care declarația returnează false (cum era de așteptat) , deoarece x nu este egal cu 10:
Aceasta în if în care declarația returnează true (poate nu cum era de așteptat), pentru că 10 este adevărat:
Aceasta în if în care declarația returnează false (poate nu cum era de așteptat), deoarece 0 este falsă:
O misiune returnează întotdeauna valoarea misiunii.
Expecting Comparație Loose
În comparație regulat, tipul de date nu contează. Această afirmație dacă returnează true :
În comparație strictă, tipul de date nu contează. Această afirmație dacă returnează false :
Este o greșeală comună să uităm că declarațiile de comutare folosesc comparație strictă:
Acest comutator caz va afișa o alertă:
Acest comutator caz nu va afișa o alertă:
Derutant Adăugarea & Concatenation
Adăugarea este despre adăugarea de numere.
Concatenarea este vorba despre adăugarea de siruri de caractere.
În JavaScript ambele operațiuni folosesc același operator +.
Din această cauză, adăugând un număr ca număr va produce un rezultat diferit de adăugarea unui număr ca un șir de caractere:
var x = 10 + 5; //
the result in x is 15
var x = 10 + "5";
// the result in x is "105"
Încearcă - l singur » Atunci când adăugarea a două variabile, poate fi dificil de anticipat rezultatul:
var x = 10;
var y = 5;
var z = x + y;
// the result in z is 15
var x = 10;
var y = "5";
var z =
x + y;
// the result in z is "105"
Încearcă - l singur » pluteste neintelegere
Toate numerele în JavaScript sunt stocate ca 64 de biți numere în virgulă mobilă (Floats) .
Toate limbaje de programare, inclusiv JavaScript, au dificultăți cu valori reale cu virgulă precise:
var x = 0.1;
var y = 0.2;
var z = x + y
// the result in z will not be 0.3
if (z == 0.3)
// this if test will fail
Încearcă - l singur » Pentru a rezolva problema de mai sus, ajută la înmulțirea și împărțirea:
Breaking un șir JavaScript
JavaScript va permite să rupă o declarație în două rânduri:
Dar, de rupere o declarație în mijlocul unui șir de caractere nu va funcționa:
Trebuie să utilizați un "backslash" dacă trebuie să rupă o declarație într - un șir de caractere:
misplacing Punct și virgulă
Din cauza unui virgulă deplasate, acest bloc de cod se va executa indiferent de valoarea lui x:
Breaking o declarație de returnare
Este un comportament implicit JavaScript pentru a închide automat o declarație la sfârșitul unei linii.
Din acest motiv, aceste două exemple se vor întoarce același rezultat:
JavaScript va permite, de asemenea, să rupă o declarație în două rânduri.
Din acest motiv, exemplul 3 va reveni, de asemenea, același rezultat:
Dar, ce se va întâmpla dacă rupe declarația de întoarcere în două linii de genul acesta:
Funcția se va întoarce nedefinit!
De ce? Pentru că JavaScript crede că a însemnat:
Explicaţie
În cazul în care o declarație este ca incompletă:
var
JavaScript va încerca să completeze declarația citind linia următoare:
power = 10;
Dar, din moment ce această afirmație este completă:
return
JavaScript va închide automat astfel:
return;
Acest lucru se întâmplă pentru că închiderea (ending) care se (ending) declarații cu virgulă este opțională în JavaScript.
JavaScript va închide declarația de întoarcere la capătul liniei, pentru că este o declarație completă.
Niciodată nu rupe o declarație de returnare.
Accesarea Matricile cu indexuri cu numele
Multe limbaje de programare a sprijini matrice cu indici cu numele.
Matricele cu indici numite sunt numite matrice asociative (or hashes) - (or hashes) .
JavaScript nu are suport pentru matrice cu indici cu numele.
În JavaScript, matricele utilizați indici numerotata:
Exemplu
var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;
// person.length will return 3
var y = person[0];
// person[0] will return "John"
Încearcă - l singur » În JavaScript, obiecte de uz numit indecși.
Dacă utilizați un index pe nume, când se accesează o matrice, JavaScript va redefini matrice la un obiect standard de.
După redefinirea automată, metode de matrice și proprietăți vor produce rezultate nedefinite sau incorecte:
Exemplu:
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length; // person.length will
return 0
var y = person[0];
// person[0] will return undefined
Încearcă - l singur » Terminarea unei Definiție Array cu virgule
Incorect:
points = [40, 100, 1, 5, 25, 10,];
Unele motoare JSON și JavaScript va eșua, sau se comportă în mod neașteptat.
Corect:
points = [40, 100, 1, 5, 25, 10];
Terminarea unui Definiție obiect cu un Virgulă
Incorect:
person = {firstName:"John", lastName:"Doe", age:46,}
Unele motoare JSON și JavaScript va eșua, sau se comportă în mod neașteptat.
Corect:
person = {firstName:"John", lastName:"Doe", age:46}
Nedefinite nu este Null
Cu JavaScript, null este pentru obiecte, nedefinită este pentru variabile, proprietăți și metode.
Pentru a fi nul, un obiect trebuie să fie definit, în caz contrar acesta va fi nedefinită.
Dacă doriți să testați dacă există un obiect, acest lucru va arunca o eroare în cazul în care obiectul este nedefinit:
Incorect:
if (myObj !== null && typeof myObj !== "undefined")
Din această cauză, trebuie să testați typeof() în primul rând:
Corect:
if (typeof myObj !== "undefined" && myObj !== null)
Așteptându Domeniul de aplicare Bloc Nivel
JavaScript nu creează un nou domeniu de aplicare pentru fiecare bloc de cod.
Este adevărat în mai multe limbaje de programare, dar nu este adevărat în JavaScript.
Este o greșeală comună, printre noii dezvoltatori JavaScript, să credem că acest cod returnează o valoare nedefinită: