Was bringt .length in javascript und in der im Bild gestellten Aufgabe?

...komplette Frage anzeigen Hier das Bild  - (Informatik, CSS, JavaScript)

4 Antworten

Hallo Marco!

Eigentlich lässt sich deine Antwort googeln, aber da ich dieses Argument selbst nicht mag, antworte ich dir mal einfach ;).

Es gibt in jeder Skript- oder Programmiersprache Datentypen.

Sowohl einfache (primitive) wie z.B. (Ganz-)Zahlen oder Zeichenketten, wie auch komplexere (Objekte).

Diese Datentypen lassen sich bearbeiten. Hier gäbe es zum Beispiel die Addition von Zahlen oder den Teil einer Zeichenkette.

In deinem Fall hast du ein sogenanntes Array mit dem Namen numbers definiert. Ein Array ist einer der komplexeren Objekte, dieses einfache Datentypen (z.B. Zahlen) oder selbst auch Objekte enthalten kann. Im Anschluss hast du das Array mit Zahlen befüllt.

numbers = [2,4,56,22,65,2,54,88,29]

Dein Array verfügt nun, durch Javascript selbst, über Standardfunktionen unter diese auch length fällt.

Gebe doch mal z.B. console.log(numbers.length) ein und schaue was passiert?

Es wird dir die Zahl 9 ausgegeben werden, aber woher kommt diese?

Arrays kannst du dir als einen Container vorstellen, der, wie gesagt, Daten beinhalten kann. Um diese Daten auch wieder zu finden, werden diese fortlaufend indexiert, also numeriert. Allerdings muss man hier aufpassen, da nicht von 1 gezählt wird, sondern von 0.

Gebe hierzu mal console.log(numbers[0]) ein, um dein erstes Element im Array ausgeben zu lassen. Als Ergebnis erhältst du die 2.

Hiermit wäre bereits das Array hinreichend erklärt, um jetzt deine Frage nach length zu beantworten.

length ist das englische Wort für Länge und gibt hier, als Array Funktion, die Länge deines Arrays, also die Anzahl deiner Elemente aus. Innerhalb der unten gegebenen Schleife (for Schleife), durchläuft diese dein Array von dem Index 0 bis numbers.length, also bis zu dem letzten Eintrag in deinem Array.

Warum steht da überhaupt ein < numbers.length? Wollten wir nicht den letzten Eintrag haben?

Wie schon gesagt, beginnt der Arrayindex nicht bei 1, sondern bei 0. Daraus folgt der Index 8 als letzten Index in einem Array mit 9 Elementen.

Würde es somit <= numbers.length heißen, würdest du dein Array außerhalb der Grenzen indexieren (mit numbers[9]) und einen Fehler verursachen.

Das heißt, innerhalb deiner Schleife sorgt numbers.length für die Schaffung der gültigen oberen Laufgrenze des Indexes und i=0 für den Startindex.

So, auf eine Frage, die man in einem Satz beantworten kann, habe ich jetzt einen halben Roman geschrieben und hoffe dir damit helfen zu können!

Programmieren ist meines Erachtens nach etwas sehr kreatives, aber auch sehr kompliziertes. Daher Kopf hoch und halte dir vor Augen das es mit jedem Schritt (oder Index) vorwärts geht ;).

MfG

Norman Fober

In dem Fall ist es die Anzahl der Elemente in dem Array. Es kann aber auch dafür verwendet werden, die Länge einer Zeichenkette zu bestimmen.

PS: Das let kannst du dir schenken.

PS: Das let kannst du dir schenken.

Das let sollte man sich nicht aber schenken, weil JavaScript die Variablen dann alle in den globalen Scope setzt - dort will man die aber nicht haben. Ich glaube, im strict Mode muss man auch vor jede Variable entweder var, let oder const setzen. 

0
@ceevee

Die Variablen sind in dem Scope, in dem sie deklariert wurden (mit var).

Es ist üblich und vorteilhaft, Variablen zu deklarieren, notfalls sich selbst dazu zu zwingen (Option Explicit in Visual Basic).
In gwbasic, bzw. qbasic hat man damals schon mit Let gearbeitet. Als es optional wurde, wurde es nach und nach nicht mehr verwandt.

Kaum eine Webseite, die JavaScript verwendet, arbeitet mit let. Ich war zutiefst erstaunt, dass es das überhaupt in JavaScript gibt, weil es kein Basic-Derivat ist.

0
@ceevee

Mit const hatte ich schon einmal in JavaScript / JScript / VBScript Probleme. Ich weiß nicht, ob diese inzwischen behoben wurden.

Ich musste mir Konstanten als Variablen über die Schreibweise kenntlich machen, z. B. C_MEINE_KONSTANTE.

0
@Suboptimierer

Die Variablen sind in dem Scope, in dem sie deklariert wurden (mit var).

Wenn du var davorschreibst, dann ja. Wenn du das var weglässt, dann nicht. Gar nichts davorschreiben, ist die schlechteste Alternative.

for (i = 0; i < 10; i++) {

ist gültiges JS, aber i ist im globalen Scope. 

Mit var hast du aber immer noch das Problem, dass es exklusiv nur in JavaScript leider Hoisting gibt. 

https://de.wikipedia.org/wiki/Hoisting

, was die ganze Sache verkompliziert.

let und const gibt es erst seit dem aktuellen JavaScript-Standard (ES6), bei dem es eine Frage der Zeit ist, bis der sich in allen Browsern durchgesetzt hat. Dann sollte man aber let/const anstatt var nutzen, weil beide Typen Vorteile gegenüber var haben - bei let gibt's kein Hoisting und const sind echte Konstanten, die nachträglich nicht mehr geändert werden können. 

In node.js gibt es let/const bereits, falls der Fragesteller also in node.js programmiert, sollte er das gleich so lernen. 

Der Variablen-Scope in JavaScript ist recht kompliziert und funktioniert anders als in anderen Sprachen. 

1
@ceevee

Im Code des Fragestellers finde ich es unübersichtlich, dass man nicht sieht, welche Variablen in dem Block verwendet werden. Deswegen werde ich noch einige Zeit lang bevorzugen, die verwendeten Variablen am Anfang zu staffeln.

Ich muss auch nicht innerhalb von Schleifen und Verzweigungen lokale Variablen haben. Die Funktionsebene reicht mir. Ich hatte bislang mit Hoisting noch keine Probleme (trotzdem interessantes Thema). Wahrscheinlich liegt es daran, weil ich sehr sparsam mit globalen Variablen umgehe, sie deutlich kennzeichne und alles andere in den ersten Zeilen einer Funktion deklariere.

Dass let jetzt das brilliante, neue Feature wird, hat mich ehrlich gesagt total überrascht. ^^ Das Schlüsselwort ist jedenfalls nicht neu.

0

das ist die anzahl der einträge im array. hat bei ner for schleife an der stelle ja auch sinn..

.length ist immer gut, falls du die Länge eines Objektes benötigst, z.B. bei diesem Array:

var fruits = ['apple', 'maracuja', 'wine'];

beträgt die Länge drei.

Möchtest du also alle Fruchtnamen ausgeben, brauchst du eine Schleife, die so lang wie der Array ist.

for (var i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

Was möchtest Du wissen?