Ultimele tutoriale de dezvoltare web
 

JavaScript Greșeli comune


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:

var x = 0;
if (x == 10)
Încearcă - l singur »

Aceasta în if în care declarația returnează true (poate nu cum era de așteptat), pentru că 10 este adevărat:

var x = 0;
if (x = 10)
Încearcă - l singur »

Aceasta în if în care declarația returnează false (poate nu cum era de așteptat), deoarece 0 este falsă:

var x = 0;
if (x = 0)
Încearcă - l singur »

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 :

var x = 10;
var y = "10";
if (x == y)
Încearcă - l singur »

În comparație strictă, tipul de date nu contează. Această afirmație dacă returnează false :

var x = 10;
var y = "10";
if (x === y)
Încearcă - l singur »

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

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
Încearcă - l singur »

Acest comutator caz nu va afișa o alertă:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
Încearcă - l singur »

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:

Exemplu

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Încearcă - l singur »

Breaking un șir JavaScript

JavaScript va permite să rupă o declarație în două rânduri:

Exemplul 1

var x =
"Hello World!";
Încearcă - l singur »

Dar, de rupere o declarație în mijlocul unui șir de caractere nu va funcționa:

Exemplul 2

var x = "Hello
World!";
Încearcă - l singur »

Trebuie să utilizați un "backslash" dacă trebuie să rupă o declarație într - un șir de caractere:

Exemplul 3

var x = "Hello \
World!";
Încearcă - l singur »

misplacing Punct și virgulă

Din cauza unui virgulă deplasate, acest bloc de cod se va executa indiferent de valoarea lui x:

if (x == 19);
{
    // code block 
}
Încearcă - l singur »

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:

Exemplul 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Încearcă - l singur »

Exemplul 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
Încearcă - l singur »

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:

Exemplul 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
Încearcă - l singur »

Dar, ce se va întâmpla dacă rupe declarația de întoarcere în două linii de genul acesta:

Exemplul 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
Încearcă - l singur »

Funcția se va întoarce nedefinit!

De ce? Pentru că JavaScript crede că a însemnat:

Exemplul 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
Încearcă - l singur »

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

Exemplu

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Încearcă - l singur »