Hallo,
Ich hatte ein Javascript, was ohne jede Fehlermeldung einfach nicht lief. Ursache war, dass ich versucht habe, die Länge eines Arrays mit length(arrayvariable) zu bestimmen (Es war schon spät).
#1# warum erhalte ich in dem Fall keine Fehlermeldung wie "Funktion length nicht definiert"?
length ist ein Bezeichner (Identifier), welcher anhand der Scope-Chain aufgelöst wird (siehe auch Identifier Resolution).
An oberster Stelle in der Scope-Chain steht das globale Objekt window. Wenn in keinem der relevanten Funktions-Scopes eine lokale Variable namens length gefunden wurde, so wird eine entsprechende globale Variable (Eigenschaft des window-Objektes) gesucht. Und siehe da, window hat eine Eigenschaft length, die anscheinend dasselbe wiedergibt wie http://de.selfhtml.org/javascript/objekte/frames.htm#length@title=window.frames.length.
length ist vom Typ Number. Wenn du den Call-Operator () auf einen Number-Wert anwendest, so bekommst du eine TypeError-Exception, weil du versuchst hast, eine Nicht-Funktion aufzurufen – was natürlich nicht geht.
Einen Fehler solltest du also auf jeden Fall bekommen haben. In der Firefox-Fehlerkonsole wird diese Exception mit »length is not a function« wiedergegeben. Was willst du mehr? ;)
#2# Es gibt ja durchaus auch Programmiersprachen, in welchen die Größe eines Arrays mit einer Funktion ermittelt wird. Welche Vor- und Nachteile hat
sizeof($arrayvariable)
vs.arrayvariable.length
?
Das ist wie gesagt ein unterschiedliches Sprachdesign. JavaScript ist objekt-orientiert, also fragt man das Array-Objekt selbst, wieviel Einträge es hat, anstatt eine externe Funktion oder einen Operator darauf anzuwenden.
Mathias