bleicher: variablenbehandlung

Grüße,
wie geht JS eigentlich mit variablen um?
AFAIK sind es immer kopien die übergeben variablen, oder?
gibt es da optionen "zeigerverhalten" zu erzeugen?

hintergrund - größerer string könnte mehreren objekten als eigenschaft(swert) zugewiesen werden - ich suche nach weg den "überhang" minimal zu halten.
MFG
bleicher

--
__________________________-

FirefoxMyth
  1. AFAIK sind es immer kopien die übergeben variablen, oder?

    Wenns Objekte sind wie z.B. document.getElementById(...) oder sowas, dann können es eigentlich nur Referenzen sein.
    Ich denke da wird zwischen Referenztyp und Wertetyp unterschieden.

    Ok für deine Frage bringt dir das nichts, seh ich ein :-)
    Außer du packst den String in ein Objekt und weist dann dieses Objekt zu.

  2. Hi,

    wie geht JS eigentlich mit variablen um?
    AFAIK sind es immer kopien die übergeben variablen, oder?

    Skalare Typen (Zahlen, Strings, ...) werden per value übergeben,
    alles „komplexere“, also Objekte, wird per reference übergeben.

    (Mathias wird das sicher noch detailierter beschreiben bzw. ggf. korrigieren können.)

    gibt es da optionen "zeigerverhalten" zu erzeugen?

    Nein.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  3. gruss bleicher,

    gibt es da optionen "zeigerverhalten" zu erzeugen?

    ... benutze ein [String] Objekt anstelle des primitiven "string values".

    var str = "str ";
    alert(typeof str);

    var strObj = new String("strObj");
    alert(typeof strObj);

    var obj = Object("obj");
    alert(typeof obj );

    so long - peterS. - pseliger@gmx.net

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
    1. Hi,

      gibt es da optionen "zeigerverhalten" zu erzeugen?

      ... benutze ein [String] Objekt anstelle des primitiven "string values".

      Um was genau zu gewinnen?

      Wenn ich deinen Code

      var str = "str ";
      alert(typeof str);

      var strObj = new String("strObj");
      alert(typeof strObj);

      um folgendes ergänze,

      function x(s) {  
        s = "abc";  
        alert(s);  
      }  
        
      x(str);  
      x(strObj);  
      alert(str);  
      alert(strObj);
      

      dann kommt bei den letzten beiden alerts immer noch "str" und "strObj" wieder raus.

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      1. gruss ChrisB,

        gibt es da optionen "zeigerverhalten" zu erzeugen?

        ... benutze ein [String] Objekt anstelle des primitiven "string values".

        Um was genau zu gewinnen?

        bleicher wollte wissen, wie man "zeigerverhalten" in JavaScript erzwingt.
        Da Objekte in JavaScript referenziert werden, habe ich vorgeschlagen,
        Objekte anstelle von Werten zu benutzen.

        Bleicher wollte eine Referenz gewinnen, um möglichen aber wahrscheinlich
        zu vernachlässigenden Speicheroverhead durch wiederholtes Zuweisen von
        Werten (die eben nicht referenziert werden) zu vermeiden.

        Mein Beispiel sollte auch nur zeigen, worin sich die Typen der auf
        unterschiedliche Weise erzeugten Variablen unterscheiden.

        var str = "str ";
        alert(typeof str);

        var strObj = new String("strObj");
        alert(typeof strObj);

        var obj = Object("obj");
        alert(typeof obj );

        [str] bildet einen einfachen Wert ab, bei [strObj] und [obj] handelt es
        sich um Objekte, deren [valueOf] methode einen einfachen String-Wert
        zurückgibt.

        Wenn ich deinen Code

        ...

        um folgendes ergänze,

        function x(s) {

        s = "abc";
          alert(s);
        }

        x(str);
        x(strObj);
        alert(str);
        alert(strObj);

        
        > dann kommt bei den letzten beiden alerts immer noch "str" und "strObj" wieder raus.  
          
        ... genauso sollte es sein, und es steht auch in keinem Widerspruch  
        zu meinen bereits gemachten Ausführungen.  
          
          
        so long - peterS. - pseliger@gmx.net  
          
        
        -- 
        »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.  
        Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - [Douglas Crockford](http://javascript.crockford.com/)  
          
        [ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:\]](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%28+fl%3A%29+br%3A%3E+va%3A%28+ls%3A%26+fo%3A%29+rl%3A%29+n3%3B%7D+n4%3A%7D+ss%3A%7D+de%3A%B5+js%3A%7D+mo%3A%3F+zu%3A%5D)  
        
        
        1. Hi,

          bleicher wollte wissen, wie man "zeigerverhalten" in JavaScript erzwingt.

          „Zeigerverhalten“ würde ich mit Übergabe by reference gleichsetzen.

          dann kommt bei den letzten beiden alerts immer noch "str" und "strObj" wieder raus.

          ... genauso sollte es sein, und es steht auch in keinem Widerspruch
          zu meinen bereits gemachten Ausführungen.

          Wenn wirklich by reference übergeben würde, dann müsste das Überschreiben innerhalb der Funktion sich auch außerhalb auswirken, und dort den Wert des Objektes ändern. Das passiert aber nicht.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. Grüße,
            hmm - und wenn man das problem um nachträgliches speichern/gewinnen aus XML format anwendet^^? nicht machbar nehme ich an?
            MFG
            bleicher

            --
            __________________________-

            FirefoxMyth
            1. Hi,

              hmm - und wenn man das problem um nachträgliches speichern/gewinnen aus XML format anwendet^^? nicht machbar nehme ich an?

              Ich habe - wieder mal - keine Idee, was du jetzt wissen willst, vor allem im vorliegenden Zusammenhang.

              Kannst du dir nicht bitte endlich mal angewöhnen, deine Fragen halbwegs verständlich zu formulieren, und nicht immer nur Ein- oder Zweizeiler abzusondern, die meist auch noch Grammatik-/Rechtschreibfehler in einer Anzahl enthalten, die kaum mit einem gelegentlichen, übersehenen Vertipper entschuldbar sind?

              (Für ein Mehr an sinnvoll eingesetzter Interpunktion darf es dann auch gern ein Weniger an Zeichen wie ^^ sein. Du bist doch kein LOL-Kitten, also schreibe bitte auch nicht so.)

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. Grüße,

                Ich habe - wieder mal - keine Idee, was du jetzt wissen willst, vor allem im vorliegenden Zusammenhang.

                ich fragte in meinem Urpost, ob es möglich wäre größere Datensätze (String) den Objecten als Eigenschaftswerte zuzuweisen und dies als Zeiger zu behandeln. Auf diese Weise will ich den Overhead vermeiden, wenn lgeicher String mehrere Objecten angehängt wird.
                Die ergänzende Frage war, ob sich die Zeiger anschließend auch in XMLform wandeln ließen, damit man die Datensaätze auch dauerhaft speichern könnte (volles C99-arsenal erwünscht^^).

                Kannst du dir nicht bitte endlich mal angewöhnen, deine Fragen halbwegs verständlich zu formulieren, und nicht immer nur Ein- oder Zweizeiler abzusondern, die meist auch noch Grammatik-/Rechtschreibfehler in einer Anzahl enthalten, die kaum mit einem gelegentlichen, übersehenen Vertipper entschuldbar sind?

                vielleicht - gelegentlich  bemühe ich mich auch drum, aber nur wenn ich auf zitatensammlung ziele^^

                (Für ein Mehr an sinnvoll eingesetzter Interpunktion darf es dann auch gern ein Weniger an Zeichen wie ^^ sein. Du bist doch kein LOL-Kitten, also schreibe bitte auch nicht so.)

                myau _(^.^)_ !!

                MFG
                bleicher

                --
                __________________________-

                FirefoxMyth
                1. @@bleicher:

                  nuqneH

                  vielleicht - gelegentlich  bemühe ich mich auch drum, aber nur wenn ich auf zitatensammlung ziele^^

                  Gut geschielt ist halb getroffen.

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
                  1. Grüße,
                    wäre das ein metazitat?
                    oder wie nennt man "film im film" oder "geschichte in einer geschichte"?
                    MFG
                    bleicher

                    --
                    __________________________-

                    FirefoxMyth
          2. hallo again ChrisB,

            „Zeigerverhalten“ würde ich mit Übergabe by reference gleichsetzen.

            richtig.

            Wenn wirklich by reference übergeben würde, dann müsste das Überschreiben
            innerhalb der Funktion sich auch außerhalb auswirken, und dort den Wert
            des Objektes ändern. ...

            keineswegs, das Überschreiben einer Variable hat genau keinen Einfluß auf
            diejenige Referenz, die vorher auf dieser Variable abgebildet war, es sei
            denn, diese Variable wäre die zuletzt referenzierende gewesen, und nur dann
            wäre das referenzierte Objekt verloren.

            var x = y = z = obj = new String("obj");  
            alert(x); // "obj"  
            alert(y); // "obj"  
            alert(z); // "obj"  
              
            alert(x.anhang); // [undefined]  
            alert(y.anhang); // [undefined]  
            alert(z.anhang); // [undefined]  
              
            obj.anhang = "anhang";  
            delete obj;  
            alert(typeof obj); // "undefined"  
              
            alert(x.anhang); // "anhang" - referenziert immmer noch [obj]  
            alert(y.anhang); // "anhang" - referenziert immmer noch [obj]  
            alert(z.anhang); // "anhang" - referenziert immmer noch [obj]  
              
            x = "x";  
              
            alert(x); // "x"  
            alert(y); // "obj"  
            alert(z); // "obj"  
              
            y = "y";  
              
            alert(x); // "x"  
            alert(y); // "y"  
            alert(z); // "obj" - letzte Referenz des urspünglichen [obj]  
              
            z = "z";  
            alert(z); // "z" - »nu is schluss«
            

            ... Das passiert aber nicht.

            zum Glück ...

            ... abgesehen davon gilt für Dein Bsp. wie nicht anders zu erwarten:

            function x(s) {  
              if (obj && ((typeof obj == "object") || (typeof obj == "function"))) {  
                s.anhang = "anhang";  
                alert(s.anhang); // "anhang"  
              }  
            }  
            obj = Object("obj");  
            alert(obj.anhang); // [undefined]  
              
            x(obj); // "anhang"  
              
            alert(obj.anhang); // "anhang"
            

            so long - peterS. - pseliger@gmx.net

            --
            »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
            Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
            ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]