effel: Array mit Array verlinkt ?

2 ARRay miteinander verlinkt ??

nodejs v14.18.0
Javascript mir unbekannt

'use strict';
.
var ANZ1=[2,4]; 
var ANZ2=[].
var ANZX=[];
.
ANZ2=ANZ1;    ANZ2 erhält von ANZ1 2,4
.
ANZX=ANZ1     ANZX erhält von ANZ1 2,4; ANZX enthält 2,4
.
console.log("vor 20 ANZ2 "+ANZ2); // hier ANZ2 noch 2,4
Basis=2 (number)
while (Z0 < ANZX.length )     ANZX[0] 2  ANZ2 2,4 
ANZX[Z0]=  ANZX[Z0]-Basis;    ANZX[0] 0  ANZ2 0,4
Z0=Z0+1;                                  
  } 

ANZX enthält 0,2 und EBENSO ANZ2 enthält statt 2,4 0,2 als ob Array ANZX und ANZ2 "verlinkt" sind

  1. Guten Abend,

    2 ARRay miteinander verlinkt ??

    nodejs v14.18.0
    Javascript mir unbekannt

    eine kurze formlose Anrede ist nicht zuviel verlangt und kommt bei den Lesern gut an.

    'use strict';
    
    var ANZ1=[2,4]; 
    var ANZ2=[];
    var ANZX=[];
    
    ANZ2=ANZ1;    // ANZ2 erhält von ANZ1 2,4
    
    ANZX=ANZ1;    // ANZX erhält von ANZ1 2,4; ANZX enthält 2,4
    
    console.log("vor 20 ANZ2 "+ANZ2); // hier ANZ2 noch 2,4
    Basis=2 (number);
    while (Z0 < ANZX.length )     // ANZX[0] 2  ANZ2 2,4 
    ANZX[Z0]=  ANZX[Z0]-Basis;    // ANZX[0] 0  ANZ2 0,4
    Z0=Z0+1;                                  
      } 
    

    dein ursprüngliches Codebeispiel strotzt nur so von Syntaxfehlern. Zum Beispiel die vielen Punkte oder die fehlenden Kommentarzeichen, oder die fehlende öffnende Klammer bei der while-Schleife. Ich habe das mal weitgehend repariert. Nur die Anweisung

    Basis=2 (number)
    

    erschließt sich mir überhaupt nicht.

    ANZX enthält 0,2 und EBENSO ANZ2 enthält statt 2,4 0,2 als ob Array ANZX und ANZ2 "verlinkt" sind

    Ich bin mir immer noch nicht sicher, ob ich das Problem verstanden habe. Aber bei Zuweisungen von komplexen Datentypen (Array, Object) macht Javascript keine Kopie, sondern weist nur eine Referenz (auf gut Deutsch: einen Zeiger) auf das ursprüngliche Datenobjekt zu. Jegliche Änderungen an der vermeintlichen Kopie wirken dann in Wirklichkeit direkt auf das Original.

    Immer eine Handbreit Wasser unterm Kiel
     Martin

    --
    Wenn ich den See seh, brauch ich kein Meer mehr.
  2. Hallo,

    2 ARRay miteinander verlinkt ??

    Ist offensichtlich so.

    ANZ2=ANZ1; ANZ2 erhält von ANZ1 2,4

    Der Kommentar ist irreführend. Array 2 bekommt nicht den Inhalt von Array 1, Array 2 ist Array 1

    als ob Array ANZX und ANZ2 "verlinkt" sind

    Das erklärts dann, oder?

    Gruß
    Kalk

  3. Hallo effel,

    Javascript mir unbekannt

    Welche Sprache(n) kennst Du denn? Vielleicht kann man Analogien zur Speicherverwaltung in JavaScript finden.

    Grundsätzlich ist in JavaScript alles ein Objekt - und was keins ist (true, false, Zahlen, Strings), wird bei Bedarf als ein solches getarnt.

    Wenn Du ein Objekt in einer Variablen speicherst, dann ist dieser Satz schon eine Fehldeutung. Das tust Du nämlich nicht. Objekte singen zwar keine Lieder, sind sonst aber wie Katzen: sie leben auf einer Halde (kein Witz, die verwendete Speicherstruktur nennt sich Heap). Wenn Du [2,4] an ANZ1 zuweist, dann entsteht ein Array-Objekt mit zwei Werten darin auf dem Heap. Es trägt aber ein Halsband und daran hängt eine lange Leine, und die Zuweisung an ANZ1 knotet das andere Ende der Leine bei ANZ1 fest.

    Die Zuweisung ANZ2 = ANZ1 erzeugt nun kein neues Kätzchen. Statt dessen bekommt die erste Katze eine zweite Leine ans Halsband, und das andere Ende der zweiten Leine wird bei ANZ2 festgeknotet.

    Nun ist wohl klar, was passiert: Wenn Du ANZ2[0] = 99 ausführst, dann läuft der Computer von ANZ2 aus an der Leine entlang und klebt dem gefundenen KaterArray die 99 an die Indexposition 0. Wenn Du danach ANZ1[0] anschauen willst, so läuft der Computer von ANZ1 aus los und landet beim gleichen Array, weil beide Leinen zur gleichen Katze führen.

    Und wenn Du am Ende ANZ1=null und ANZ2=null ausführst, dann schneidest Du beide Leinen durch. Das arme Array kann dann nur noch einen Hit über Erinnerungen singen und in den sphärischen Raum aufsteigen, wo es vom bösen Garbage Collector ins Nichts gezaubert wird.

    Miau 😿
    Rolf

    --
    sumpsi - posui - obstruxi
    1. Danke !

      Ich kenne Javascript. Das Programme ist in Node 14,18, das verwendet Javascript (Version) kenne ich nicht. Und dann habe beim Kopieren "Node 14,18" weggelassen. Sorry!

      Jedenfalls ist die Antwort sehr ausführlich und ich werde sie morgen ausführlich studieren.

      effel

      1. Hallo effel,

        Ich kenne Javascript

        Hm. Die Kenntnis scheint an entscheidenden Stellen lückenhaft. Ich kann Dich dafür auch nicht auf unser Wiki verweisen; ich glaube, diesen Aspekt behandelt kein Artikel einführend.

        Die JavaScript-Engine von Node ist übrigens Google V8. Welche Version von V8 in welcher Node-Version steckt, ist nicht so klar, aber wenn man wissen will, welche Sprachfeatures von JS in welcher Node-Version stecken, ist Kangax immer der richtige Ansprechpartner.

        Rolf

        --
        sumpsi - posui - obstruxi
    2. @@Rolf B

      Und wenn Du am Ende ANZ1=null und ANZ2=null ausführst, dann schneidest Du beide Leinen durch. Das arme Array kann dann nur noch einen Hit über Erinnerungen singen und in den sphärischen Raum aufsteigen, wo es vom bösen Garbage Collector ins Nichts gezaubert wird.

      Schrödingers Katze: Wenn man nicht genau hinsieht, ist sie noch lebendig und doch schon tot.

      😷 LLAP

      --
      „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
      — Joachim Gauck über Impfgegner
      1. An AlLe, die mit freundlich geschrieben haben.

        Ich bedanke mich für die ausführliche und sehr tierfreundliche Darstellung. Jetzt habe ich es verstanden und werde mein Programm noch einmal unter diesem Gesichtspunkt durchforsten.

        Danke und freundl. Gruß

        effel