Antje Hofmann: variablenbezeichnung erst zur laufzeit erzeugen

Beitrag lesen

Hallo regenfeld

toller Thread, der gefällt mir

Der Punkt-Operator macht nichts anderes, als auf ein benanntes Feld in einem Array zuzugreifen.

Hmm, ich hab zu engstirnig gedacht anscheinend. Der Punktoperator grefit IMHO nicht auf ein Array zu, sondern generell auf Objekte, noch genauer: Man kann mittels Punktoperator auf Methoden, und Attribute von Objekten zugreifen. Da ja window, forms, elements, ... Objekte der JS-Sprache sind, dachte ich anfangs es müsse auch ein Punkt dazwischen sein.

Das stimmt auch. Um das Verständnis zu vertiefen. Dies gilt ausschließlich für assoziative Arrays.

Woran ich aber nicht gedacht hatte, war dass ja Arrays in Javascript auch nix anderes als Objekte sind.

var blah = new Array();
blah['blub'] = "xyz";
alert(bla.blub);

Aber:  blah[0]="abc";
       alert(blah.0);

geht nicht.

also greift bla.blub eigentlich - grob gesprochen - nicht auf ein Array zu, sondern genauergesagt auf das Attribut (Variable) 'blub' das Array-Objektes 'bla'.

genau, die Zuweisung blah["blub"] erzeugt also keine Eintrag in der Liste der Element des assoziativen Arrays, sondern legt die Eigenschaft 'bla' an.

Zusätzlich gibt in JS dann eben auch noch den []-Operator, der anscheinend die selbe Funktionalität besitzt wie der Punktoperator:

jaein
Möchtest du auf den Index eines Elementes zugreifen, dann sind die Klammern zwingend notwendig.

z.B. bei alert(blah[0]);

Beispiel:

var my = new MyClass();
my.name = "regenfeld" // wäre dann gleichwertig zu my['name'] = "regenfeld";
                      // bei Arrays ist es dann halt umgekehrt

auch wieder ein jain

function MyClass(name)
 { this.name=name }

var my = new MyClass("regenfeld");
 var my2 = new MyClass("regenfeld2");

hier klappt es bequem mit

alert(my.name)
alert (my2.name)

alert(my["name"])
alert (my2["name"])

machst du aber folgendes:

my.vorname="keine Ahnung";
geht alert(my["vorname"]) und alert(my.vorname)

für my2 aber nicht.

Der []-Operator ist quasi nur ein Gimmick, zur instinktiveren Handhabung von (Array-)Objekten in Javascript, so wie man es aus anderen Programmiersprachen gewöhnt ist.

oder anders ausgedrückt mit [] kannst du Objekteigenschaften oder indizie ansprechen.
Er ersetzt quasi den Punktoperator. Ist ein zusätzliches Feateare.

So, schätzermativ dürfte das jetzt passen, ich hab einfach zuwenig in Klassen/Objekten als vielmehr in Arrays, und simplen Datentypen gedacht, oder hab ich noch irgendwo nen Denkfehler eingebaut?

Ein Array ist ein Objekt und kann deshalb eben auch Objekteigenschaften haben. Zusätzlich kann aber auch ein Array eine indizierte Liste von Elementen besitzen.

PS: Sieht aus, als wärs wirklich lohnenswert, mich mal näher mit dem Objekt-Schema von JS auseinanderzusetzen ;-)

Ja ist es, hinter js steht mehr als die meisten erwarten und glauben.

Viele Grüße

Antje