variablenbehandlung
bleicher
- javascript
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
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.
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
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
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
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)
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
Grüße,
hmm - und wenn man das problem um nachträgliches speichern/gewinnen aus XML format anwendet^^? nicht machbar nehme ich an?
MFG
bleicher
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
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
@@bleicher:
nuqneH
vielleicht - gelegentlich bemühe ich mich auch drum, aber nur wenn ich auf zitatensammlung ziele^^
Gut geschielt ist halb getroffen.
Qapla'
Grüße,
wäre das ein metazitat?
oder wie nennt man "film im film" oder "geschichte in einer geschichte"?
MFG
bleicher
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