LanX!: Array in ein anderes Array kopieren ohne ein neues zu erzeugen

Beitrag lesen

Lieber Felix

War das so richtig?

Ja! Und um es vorweg zu nehmen in allen 3 Fällen enthält das Array a die primitiven "number" 1,2,3.

a=[];

b=[1,2,3];
a=b.slice(0);

  

> Dadurch steht in "a" keine Referenz auf ein und dasselbe Objekt wie in "b", sondern eine Referenz auf die anfangs initialisierte Instanz des Prototypen "Array". In diesem Beispiel gibt es also zwei unterschiedliche Array-Objekte.  
  
Nein das ist falsch, slice erstellt ein neues Objekt das a zugewiesen wird.  
  
Deswegen ergibt  
  
~~~javascript
  
c=a=[];  
b=[1,2,3];  
a=b.slice(0);  
alert(c==a);  

false.

a=[];

b=[1,2,3];
for (i in b) {a[i]=b[i]};

  
und jetzt ergibt  
  
~~~javascript
  
c=a=[];  
b=[1,2,3];  
for (i in b) {a[i]=b[i]};  
alert(c==a)  

true

Und darum ging es mir.

Ist Deine Fragezeichen-Taste kaputt?

Nein, aber ich verstehe nicht was du nicht verstehst, meine Codebeispiele waren ziemlich explizit.

Der == Operator prüft nur, ob der Wert als gleich _interpretiert_ werden kann. Eine eventuelle Typenumwandlung wird intern automatisch vorgenommen.

Es gibt keine Typumwandlung weil beide Seiten vom Typ "object" sind, es wir geschaut ob das gleiche Objekt referenziert wird.

Als "Perler" magst Du vielleicht noch prüfen können, ob Du es mit dem Objekt selbst, oder nur einer Referenz auf es selbst zu tun hast,

Keine Ahnung was du mit dem "Objekt selbst" meinst. Das Model ist ziemlich ähnlich, Objekte sind in Perl Scalare mit Referenzen als Inhalt.

Könntest du mir Beispielcode geben?

in JavaScript ist das so nicht möglich. Dazu ist JS zu dynamisch - und das ist auch gut so.

Es gibt sehr wenig was JS kann und nicht auf Perl abgebildet werden kann.

Bei Interesse:

"Perl vs JS" (Deutscher Perl Workshop)

:)

Ciao
  Rolf