JavaScript – Das Handbuch für die Praxis. David Flanagan

JavaScript  –  Das Handbuch für die Praxis - David Flanagan


Скачать книгу
verlassen, sei darauf hingewiesen, dass die Details der prefer-number-Konvertierung auch erklären, warum leere Arrays in die Zahl 0 umgewandelt werden und Arrays mit nur einem Element in Zahlen konvertiert werden können:

      Number([]) // => 0: Das ist unerwartet!

      Number([99]) // => 99: Tatsächlich?

      Bei der Umwandlung von Objekten in Zahlen wird ein Objekt zunächst mithilfe des prefer-number-Algorithmus in einen primitiven Wert umgewandelt, bevor der resultierende Primitivwert in eine Zahl konvertiert wird. Der prefer-number-Algorithmus versucht zuerst, valueOf() auszuführen, bevor auf toString() zurückgegriffen wird. Die Klasse Array erbt aber die Standardmethode valueOf(), die keinen primitiven Wert zurückgibt. Wenn wir also versuchen, ein Array in eine Zahl zu konvertieren, rufen wir letztlich die toString()-Methode des Arrays auf. Leere Arrays werden in den leeren String konvertiert. Und der leere String wird in die Zahl 0 umgewandelt. Ein Array mit nur einem Wert wird in genau den String umgewandelt, in den auch dieses Element umgewandelt wird. Enthält ein Array nur eine einzelne Zahl, wird diese Zahl in einen String umgewandelt, der dann wiederum in eine Zahl zurückgewandelt wird.

       3.10Variablendeklaration und -zuweisung

      Eine der grundlegendsten Techniken in der Programmierung ist die Verwendung von Namen – Identifiern – zur Darstellung von Werten. Die Bindung eines Namens an einen Wert gibt uns die Möglichkeit, auf diesen Wert zu verweisen und ihn in den von uns geschriebenen Programmen zu verwenden. Wenn wir das tun, sprechen wir normalerweise davon, dass wir einer Variablen einen Wert zuweisen. Der Begriff Variable bedeutet, dass neue Werte zugewiesen werden können – dass sich also der mit der Variablen verbundene Wert während der Ausführung unseres Programms ändern kann. Wenn wir einem Namen dauerhaft einen Wert zuweisen, sprechen wir von einer Konstanten anstatt von einer Variablen.

      Bevor Sie eine Variable oder Konstante in einem JavaScript-Programm benutzen können, müssen Sie sie deklarieren. In ES6 und später geschieht dies mit den Schlüsselwörtern let und const, zu denen wir gleich kommen. Vor ES6 wurden Variablen mit der Anweisung var deklariert, die sich in einigen Aspekten von let unterscheidet und in einem der folgenden Abschnitte erläutert wird.

       3.10.1Deklarationen mit let und const

      In modernem JavaScript (ES6 und später) werden Variablen mit dem Schlüsselwort let deklariert, so wie hier:

      let i;

      let sum;

      Sie können auch mehrere Variablen in einer einzigen let-Anweisung deklarieren:

      let i, sum;

      Es ist gute Programmierpraxis, Ihre Variablen bei der Deklaration möglichst zu initialisieren (d.h. ihnen einen Anfangswert zuzuweisen):

      let message = "hello";

      let i = 0, j = 0, k = 0;

      let x = 2, y = x*x; // Initialisierungsausdrücke können zuvor deklarierte

      // Variablen verwenden.

      Sie müssen in der let-Anweisung keinen Anfangswert für eine Variable angeben, aber wenn Sie es nicht tun, bleibt der Wert der Variablen undefined, bis Sie ihr im Programm einen Wert zuweisen.

      Um anstelle einer Variablen eine Konstante zu deklarieren, verwenden Sie const anstelle von let. const funktioniert genauso wie let, allerdings müssen Sie die Konstante in der Deklaration auch direkt initialisieren:

      const H0 = 74; // Hubble-Konstante (km/s/Mpc).

      const C = 299792.458; // Lichtgeschwindigkeit im Vakuum (km/s).

      const AU = 1.496E8; // Astronomische Einheit: Entfernung zur Sonne (km).

      Wie der Name es schon ausdrückt, können die Werte von Konstanten nicht geändert werden, und entsprechende Versuche lösen einen TypeError aus.

      Es ist eine übliche (aber nicht allgemeingültige) Konvention, bei der Benennung von Konstanten ausschließlich Großbuchstaben zu verwenden, wie in H0 oder HTTP_NOT_FOUND, um sie dadurch von Variablen unterscheiden zu können.

image Wann man const verwenden sollte Es gibt zwei Denkschulen, was die Verwendung des Schlüsselworts const betrifft. Bei einem Ansatz wird const nur für Werte verwendet, die grundsätzlich unveränderlich sind, wie z.B. die genannten physikalischen Konstanten oder Versionsnummern von Programmen oder Byte-Folgen, die etwa zur Identifizierung von Dateitypen verwendet werden. Ein anderer Ansatz beruht auf der Erkenntnis, dass sich auch viele der sogenannten Variablen während der Laufzeit der Programme praktisch nie ändern. Bei diesem Ansatz deklarieren wir alles mit const und ändern die Deklaration erst dann auf let, wenn wir feststellen, dass wir dem Wert tatsächlich Veränderlichkeit erlauben möchten. Das kann dazu beitragen, Fehler zu vermeiden, indem versehentliche Änderungen an Variablen verhindert werden.
Beim ersten Ansatz verwenden wir const nur für Werte, die sich nicht ändern dürfen. Beim zweiten verwenden wir const für alle Werte, solange sich diese nicht ändern. In meinen eigenen Programmen bevorzuge ich den ersten Ansatz.

      In Kapitel 5 erfahren Sie mehr über die for-, for/in- und for/of-Schleifenanweisungen in JavaScript. Jede dieser Schleifen enthält eine Schleifenvariable, der bei jedem Durchlaufen der Schleife ein neuer Wert zugewiesen wird. In JavaScript lässt sich die Schleifenvariable direkt als Teil der Schleifensyntax deklarieren, und dies ist eine weitere gebräuchliche Art, let zu verwenden:

      for(let i = 0, len = data.length; i < len; i++) console.log(data[i]);

      for(let datum of data) console.log(datum);

      for(let property in object) console.log(property);

      Es mag überraschend erscheinen, aber Sie können auch const verwenden, um die »Schleifenvariablen« für for/in- und for/of-Schleifen zu deklarieren, solange im Körper der Schleife kein neuer Wert zugewiesen wird. In diesem Fall besagt die const-Deklaration lediglich, dass der Wert für die Dauer eines Schleifendurchlaufs konstant ist:

      for(const datum of data) console.log(datum);

      for(const property in object) console.log(property);

       Geltungsbereich von Variablen und Konstanten

      Der Geltungsbereich (Scope) einer Variablen ist derjenige Bereich im Quellcode Ihres Programms, in dem sie definiert ist. Variablen und Konstanten, die mit let und const deklariert werden, haben einen blockbezogenen Geltungsbereich. Das bedeutet, dass sie nur innerhalb des Codeblocks definiert sind, in dem auch die Anweisung let oder const steht. JavaScript-Klassen- und Funktionsdefinitionen sind Blöcke, ebenso die Körper von if/else-Anweisungen, von while- und for-Schleifen und so weiter. Grob gesagt: Wird eine Variable oder Konstante innerhalb eines Bereichs deklariert, der von geschweiften Klammern umschlossen ist, ist sie auch nur innerhalb dieses Bereichs definiert. (Und es ist natürlich nicht erlaubt, eine Variable oder Konstante in Codezeilen zu referenzieren, die vor der entsprechenden let- oder const-Anweisung ausgeführt werden.) Für Variablen und Konstanten, die als Teil einer for-, for/in- oder for/of-Schleife deklariert sind, stellt der Schleifenkörper den Geltungsbereich dar, auch wenn sie technisch betrachtet bereits außerhalb der geschweiften Klammern deklariert werden.

      Erscheint eine Deklaration auf der obersten Ebene außerhalb von Codeblöcken, sprechen wir von globalen Variablen oder Konstanten, die entsprechend einen globalen Geltungsbereich besitzen (also quasi »überall gültig« sind). In Node


Скачать книгу