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:
Brechen von einer JavaScript String
JavaScript ermöglicht es Ihnen, eine Erklärung in zwei Linien zu brechen:
Aber, wird eine Erklärung, in der Mitte einer Zeichenfolge zu brechen nicht:
Sie müssen einen "Backslash" verwenden, wenn Sie eine Anweisung in einem String brechen muss:
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:
JavaScript ermöglicht es Ihnen, auch eine Aussage in zwei Linien zu brechen.
Wegen dieses Beispiel 3 wird auch das gleiche Ergebnis liefern:
Aber was passiert, wenn Sie die return-Anweisung in zwei Zeilen wie diese brechen:
Die Funktion wird wieder nicht definiert!
Warum? Da JavaScript denkt, dass Sie gemeint:
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: