Gli ultimi tutorial di sviluppo web
 

JavaScript Errori comuni


Questo capitolo evidenzia alcuni errori comuni JavaScript.


Accidentalmente Utilizzando l'operatore di assegnazione

Programmi JavaScript possono generare risultati inaspettati se un programmatore utilizza accidentalmente un operatore di assegnazione (=) , al posto di un operatore di confronto (==) in un'istruzione if.

Questo if istruzione restituisce false (come previsto) perché x non è uguale a 10:

var x = 0;
if (x == 10)
Prova tu stesso "

Questo if istruzione restituisce true (forse non come previsto), perché 10 è vero:

var x = 0;
if (x = 10)
Prova tu stesso "

Questo if istruzione restituisce false (forse non come previsto), perché 0 è falso:

var x = 0;
if (x = 0)
Prova tu stesso "

Un'assegnazione restituisce sempre il valore della cessione.


In attesa di confronto allentato

In confronto normale, tipo di dati non importa. Questo if restituisce true :

var x = 10;
var y = "10";
if (x == y)
Prova tu stesso "

In rigoroso confronto, il tipo di dati non importa. Questo if restituisce false :

var x = 10;
var y = "10";
if (x === y)
Prova tu stesso "

E 'un errore comune a dimenticare che le istruzioni switch utilizzano confronto rigoroso:

Questo interruttore caso verrà visualizzato un avviso:

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
Prova tu stesso "

Questo interruttore caso non visualizzerà un avviso:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
Prova tu stesso "

Confondere Addition & concatenazione

Inoltre è di circa l'aggiunta di numeri.

La concatenazione è di aggiungere le stringhe.

In entrambe le operazioni JavaScript utilizzano lo stesso operatore +.

A causa di questo, aggiungendo un numero come numero produrrà un risultato diverso da aggiungendo un numero come stringa:

var x = 10 + 5;          // the result in x is 15
var x = 10 + "5";        // the result in x is "105"
Prova tu stesso "

Quando si aggiungono due variabili, può essere difficile prevedere il risultato:

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"
Prova tu stesso "

Misunderstanding Galleggianti

Tutti i numeri in JavaScript vengono memorizzati come 64-bit numeri in virgola mobile (float).

Tutti i linguaggi di programmazione, tra cui JavaScript, hanno difficoltà con valori precisi in virgola mobile:

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
Prova tu stesso "

Per risolvere il problema di cui sopra, aiuta a moltiplicare e dividere:

Esempio

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Prova tu stesso "

Rompere una stringa JavaScript

JavaScript vi permetterà di rompere una dichiarazione in due linee:

esempio 1

var x =
"Hello World!";
Prova tu stesso "

Ma, rompendo una dichiarazione nel mezzo di una stringa non funziona:

esempio 2

var x = "Hello
World!";
Prova tu stesso "

È necessario utilizzare un "backslash" se si deve rompere una dichiarazione in una stringa:

esempio 3

var x = "Hello \
World!";
Prova tu stesso "

misplacing virgola

A causa di una virgola fuori posto, questo blocco di codice eseguirà indipendentemente dal valore di x:

if (x == 19);
{
    // code block 
}
Prova tu stesso "

Rompere l'istruzione return

È un comportamento predefinito JavaScript per chiudere automaticamente un'istruzione alla fine di una linea.

Per questo motivo, questi due esempi restituiranno lo stesso risultato:

esempio 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Prova tu stesso "

esempio 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
Prova tu stesso "

JavaScript permetterà anche di rompere una dichiarazione in due linee.

A causa di questo, esempio 3 tornerà anche lo stesso risultato:

esempio 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
Prova tu stesso "

Ma, che cosa accadrà se si rompe l'istruzione return in due righe come queste:

esempio 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
Prova tu stesso "

La funzione restituisce indefinito!

Perché? Perché pensa JavaScript volevi dire:

esempio 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
Prova tu stesso "

Spiegazione

Se una dichiarazione è incompleta come:

var

JavaScript cercherà di completare la dichiarazione con la lettura della riga successiva:

power = 10;

Ma dal momento che questa affermazione è completo:

return

JavaScript si chiude automaticamente in questo modo:

return;

Questo accade perché la chiusura (fine) le dichiarazioni con punto e virgola è opzionale in JavaScript.

JavaScript chiuderà l'istruzione return alla fine della linea, perché è una dichiarazione completa.

Non interrompere mai una dichiarazione di ritorno.


Accesso Array con indici denominati

Molti linguaggi di programmazione supportano gli array con gli indici di nome.

Gli array con gli indici di nome sono chiamati array associativi (o hash).

JavaScript non supporta gli array con gli indici di nome.

In JavaScript, gli array utilizzare gli indici numerati:

Esempio

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"
Prova tu stesso "

In JavaScript, oggetti di uso chiamati indici.

Se si utilizza un indice di nome, quando si accede a un array, JavaScript ridefinirà la matrice di un oggetto standard.

Dopo la ridefinizione automatica, i metodi e le proprietà di matrice produrrà risultati indefiniti o non corretti:

esempio:

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
Prova tu stesso "

Terminare una definizione del campo con una virgola

non corretto:

points = [40, 100, 1, 5, 25, 10,];

Alcuni motori di JSON e JavaScript falliranno, o comportarsi in modo imprevisto.

Corretta:

points = [40, 100, 1, 5, 25, 10];

Terminare una definizione di un oggetto con una virgola

non corretto:

person = {firstName:"John", lastName:"Doe", age:46,}

Alcuni motori di JSON e JavaScript falliranno, o comportarsi in modo imprevisto.

Corretta:

person = {firstName:"John", lastName:"Doe", age:46}

Non definita Non è Null

Con JavaScript, nulla è per gli oggetti, non definito è per variabili, proprietà, e metodi.

Per essere nullo, un oggetto deve essere definito, in caso contrario sarà indefinito.

Se si desidera verificare se è presente un oggetto, questo genera un errore se l'oggetto non è definito:

non corretto:

if (myObj !== null && typeof myObj !== "undefined") 

A causa di questo, è necessario verificare typeof () prima:

Corretta:

if (typeof myObj !== "undefined" && myObj !== null) 

In attesa di blocco livello di ambito

JavaScript non crea un nuovo ambito per ogni blocco di codice.

E 'vero in molti linguaggi di programmazione, ma non è vero in JavaScript.

E 'un errore comune, tra i nuovi sviluppatori JavaScript, per credere che questo codice restituisce undefined:

Esempio

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Prova tu stesso "