Neueste Web-Entwicklung Tutorials
 

JavaScript Häufige Fehler


Dieses Kapitel zeigt einige gemeinsame JavaScript Fehler heraus.


Versehentlich Mit dem Zuweisungsoperator

JavaScript - Programme können zu unerwarteten Ergebnissen führen , wenn ein Programmierer versehentlich einen Zuweisungsoperator verwendet (=) statt eines Vergleichsoperator (==) in einer if - Anweisung.

Diese , if Anweisung gibt false (wie erwartet) , da x nicht gleich 10 ist:

var x = 0;
if (x == 10)
Versuch es selber "

Diese , if Anweisung gibt true (vielleicht nicht wie erwartet), weil 10 gilt:

var x = 0;
if (x = 10)
Versuch es selber "

Diese , if Anweisung gibt false (vielleicht nicht wie erwartet), da 0 false:

var x = 0;
if (x = 0)
Versuch es selber "

Eine Zuordnung liefert immer den Wert des Auftrages.


Erwartet Lose Vergleich

In regelmäßigen Vergleich, ist Datentyp keine Rolle. Diese if - Anweisung zurückgibt true :

var x = 10;
var y = "10";
if (x == y)
Versuch es selber "

In strikter Vergleich does matter Datentyp. Diese if - Anweisung zurückgibt false :

var x = 10;
var y = "10";
if (x === y)
Versuch es selber "

Es ist ein häufiger Fehler, zu vergessen, dass Switch-Anweisungen strengen Vergleich verwenden:

Dieser Fall Schalter wird eine Warnung angezeigt:

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
Versuch es selber "

Dieser Fall Schalter einen Alarm nicht angezeigt werden:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
Versuch es selber "

Verwirrende Zusatz & Verkettungs

Zusätzlich ist über die Zahlen addieren.

Verkettungs ist über Zeichenfolgen hinzuzufügen.

In JavaScript verwenden beide Operationen die gleiche Operator +.

Aus diesem Grund wird eine Zahl als Ziffer an ein anderes Ergebnis erzeugen eine Zahl als Zeichenfolge aus und fügte hinzu:

var x = 10 + 5;          // the result in x is 15
var x = 10 + "5";        // the result in x is "105"
Versuch es selber "

Wenn zwei Variablen hinzufügen, kann es schwierig sein, das Ergebnis vorwegzunehmen:

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"
Versuch es selber "

Misunderstanding Floats

Alle Zahlen in JavaScript werden als 64-Bit Fließkommazahlen (Floats) gespeichert.

Alle Programmiersprachen, einschließlich JavaScript, haben Schwierigkeiten mit präzisen Gleitkomma-Werte:

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
Versuch es selber "

Um das Problem zu lösen, oben, hilft es, sich zu vermehren und teilen:

Beispiel

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Versuch es selber "

Brechen von einer JavaScript String

JavaScript ermöglicht es Ihnen, eine Erklärung in zwei Linien zu brechen:

Beispiel 1

var x =
"Hello World!";
Versuch es selber "

Aber, wird eine Erklärung, in der Mitte einer Zeichenfolge zu brechen nicht:

Beispiel 2

var x = "Hello
World!";
Versuch es selber "

Sie müssen einen "Backslash" verwenden, wenn Sie eine Anweisung in einem String brechen muss:

Beispiel 3

var x = "Hello \
World!";
Versuch es selber "

misplacing Semikolons

Wegen eines unangebrachten Semikolon, dieser Code-Block wird unabhängig von dem Wert von x ausführen:

if (x == 19);
{
    // code block 
}
Versuch es selber "

Brechen von einer Return-Anweisung

Es ist ein Standard-JavaScript-Verhalten eine Erklärung automatisch am Ende einer Zeile zu schließen.

Aus diesem Grund werden diese beiden Beispiele wird das gleiche Ergebnis liefern:

Beispiel 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Versuch es selber "

Beispiel 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
Versuch es selber "

JavaScript ermöglicht es Ihnen, auch eine Aussage in zwei Linien zu brechen.

Wegen dieses Beispiel 3 wird auch das gleiche Ergebnis liefern:

Beispiel 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
Versuch es selber "

Aber was passiert, wenn Sie die return-Anweisung in zwei Zeilen wie diese brechen:

Beispiel 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
Versuch es selber "

Die Funktion wird wieder nicht definiert!

Warum? Da JavaScript denkt, dass Sie gemeint:

Beispiel 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
Versuch es selber "

Erläuterung

Wenn eine Anweisung unvollständig wie:

var

JavaScript wird versuchen, die Anweisung zu vervollständigen, indem die nächste Zeile zu lesen:

power = 10;

Da aber diese Aussage ist komplett:

return

JavaScript wird es automatisch wie folgt schließen:

return;

Dies geschieht, weil Schließung (Ende) Anweisungen mit Semikolon optional in JavaScript ist.

JavaScript wird die Rückkehr-Anweisung am Ende der Leitung zu schließen, weil es sich um eine komplette Aussage.

Nie eine return-Anweisung brechen.


Der Zugriff auf Arrays mit der Bezeichnung indexes

Viele Programmiersprachen unterstützen Arrays mit dem Namen Indizes.

Arrays mit dem Namen Indizes sind assoziative Arrays (oder Hashes) genannt.

JavaScript nicht unterstützt Arrays mit dem Namen Indizes.

In JavaScript - Arrays verwenden nummerierten Indizes:

Beispiel

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"
Versuch es selber "

In JavaScript verwenden , um Objekte namens Indizes.

Wenn Sie eine benannte Index verwenden, wenn ein Array zugreift, wird JavaScript um das Array zu einem Standard-Objekt neu zu definieren.

Nach dem automatischen Neudefinition, Array Methoden und Eigenschaften werden nicht definiert oder zu falschen Ergebnissen führen:

Beispiel:

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
Versuch es selber "

Beenden einer Array-Definition mit einem Komma

Falsch:

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

Einige JSON und JavaScript-Engine wird scheitern, oder unerwartet verhalten.

Korrekt:

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

Beenden einer Objektdefinition mit einem Komma

Falsch:

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

Einige JSON und JavaScript-Engine wird scheitern, oder unerwartet verhalten.

Korrekt:

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

Nicht definiert ist Not Null

Mit JavaScript ist null für Objekte, für Variablen, Eigenschaften nicht definiert ist, und Methoden.

Um null, hat ein Ziel definiert werden, sonst wird es nicht definiert werden.

Wenn Sie, wenn ein Objekt testen möchten vorhanden ist, wird dies einen Fehler aus, wenn das Objekt nicht definiert:

Falsch:

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

Aus diesem Grund müssen Sie zuerst typeof () zu testen:

Korrekt:

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

Erwartet Block Level Scope

JavaScript nicht einen neuen Bereich für jeden Codeblock erstellen.

Es ist wahr , in vielen Programmiersprachen, aber nicht wahr in JavaScript.

Es ist ein weit verbreiteter Irrtum, unter den neuen JavaScript-Entwickler, zu glauben, dass dieser Code gibt undefined zurück:

Beispiel

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Versuch es selber "