Torsten: JS Frage ....

Hi !

Es ist mal wieder so weit. Ich verstehe die (JS) welt nicht mehr !

Wo liegt der Unterschied zwischen eval() und einem simplen +  bei Strings ?
Das konkrete Beispiel:

document[name].src=eval(name+".src");

text=text+text.substring(0,1);

So wie es jetzt da steht ist es richtig ! Umgedreht geht es nicht !( der IE meckert) Aber warum ??

Für mich sehen beide Sachen eigentlich relativ analog aus ?!
Aber einmal muss es das eval sein, das andere mal darf es das eval nicht sein. Wo also liegt der Unterschied ?
..und noch eine kurze Frage zu CGI:
Ab welcher Browser Version geht die Umleitung auf eine HTML Seite per CGI mit
Location: ......... /n/n ??

Vielen Dank

Torsten

  1. Hallo Torsten,

    Es ist mal wieder so weit. Ich verstehe die (JS) welt nicht mehr !
    document[name].src=eval(name+".src");

    Also wenn ich die Zeile betrachte, geht es mir genau wie Dir <g>.

    eval() ist eine Funktion, die Zeichenketten zu "bewerten" versucht, und zwar im Sinne einer Rechenoperation. Wenn eval() etwas uebergeben bekommt, das sich nicht als Rechenoperation interpretieren laesst, erzeugt es eine Fehlermeldung. Und letzteres ist oben auf jeden Fall der Fall. Du kannst eval() mit so Sachen wie 4.35*6+7.11/45 quaelen, aber bei name+".src" streicht die Funktion die Segel ...
    Lass sie doch einfach weg:
    document[name].src=name+".src";

    Viele Gruesse
      Stefan Muenz

    1. Hallo !

      Danke ersma für die Antwort.

      Lass sie doch einfach weg:
      document[name].src=name+".src";

      ....das is ja gerade der Witz... Es geht wirklich nur so, wie ichs gepostet habe
      der IE baut nur mist wenn ichs nicht so hinschreibe.

      Das ganze ist z.B. auch unter http://www.ubisoft.com zu sehen.
      (gleich die Hauptseite beim Button wechseln)

      fuer mich waere es eben ohne das eval auch logischer aber es geht einfach nicht ohne.
      ...in dem anderen Fall geht es dafuer wieder nicht MIT dem eval().

      JS kann doch soooooo unklar sein.

      Vielen Dank
                Torsten

    2. Hallo Ihr zwei,

      Es ist mal wieder so weit. Ich verstehe die (JS) welt nicht mehr !
      document[name].src=eval(name+".src");
      Also wenn ich die Zeile betrachte, geht es mir genau wie Dir <g>.

      Soll ich mal probieren, Eure Welten wieder in Ordnung zu bringen? <g>

      eval() ist eine Funktion, die Zeichenketten zu "bewerten" versucht, und zwar im Sinne einer Rechenoperation.

      Das ist nur die halbe Wahrheit.
      eval() wandelt naemlich kontextabhaengig um.
      Ihr wisst schon, ich mach's mir immer einfach, schreibe Passagen aus der Doku ab.
      Netscape sagt darin naemlich:
        "The eval method evaluates a string of JavaScript code in
          the context of the specified object."
      (Bei MS steht mit Sicherheit irgendwo was Analoges)

      document[name].src=name+".src";

      Und damit kann diese Anweisung Berechtigung und Sinn haben.
      Ich habe natuerlich den Gesamtzusammenhang jetzt nicht, leite den mal aus der einen Zeile ab.
      Hier gibt es augenscheinlich Image-Objekte (vermutlich mit new Image() deklariert, ist aber nicht so entscheidend).

      Zuerst mal zum Verdeutlichen, das, was wir alle kennen, sieht so aus:
                    ein_Bild = new Image();
                    ein_Bild.src = 'blabla.gif';
                    document['Bild'].src = ein_Bild.src;
               document['Bild'] ist hier ein Objekt mit Eigenschaft src.
               ein_Bild ist auch ein Objekt, auch mit Eigenschaft src.
               Die Zuweisung erfolgt also zwischen Objekten.

      Zurueck zu der mysterioesen Anweisung:
      document[name] ist ebenfalls ein Image-Objekt, name dabei ein String (waere 'Bild' aus obigen Bsp.)
      Dessen src-Eigenschaft soll wie in meinem kleinen Bsp. der src-Eigenschaft eines anderen Objektes gleichgesetzt werden. Das Objekt heisst nun wohl gerade name.
      Die Variable name ist String, sahen wir gerade. Gesucht wird aber nicht die src-Eigenschaft von dieser String-Variablen (hat gar keine <g>), sondern die des Image-Objektes mit Namen name.
      Also muss man ein Objekt "machen". Sowas tut eval().
      Wenn in name "Bildchen" steht, dann macht in diesem Kontext
      eval(name + ".src") daraus Bildchen.src (Objekt mit Eigenschaft src)

      Bisschen verwirrend an der Zeile, um die es ging, das doppelte Auftauchen von name.
      Ich vermute mal, dass ist im grossen Zusammenhang des Scripts, was wir hier nicht sehen, programmtechnisch einfach geschickt geloest, mit einem String auszukommen, um  
      verschiedene Image-Objekte ansprechen zu koennen.

      War das jetzt sehr graue Theorie? Ich hoffe nicht.

      Christine

      1. Hallo Christine,

        eval() ist eine Funktion, die Zeichenketten zu "bewerten" versucht, und zwar im Sinne einer Rechenoperation.
        Das ist nur die halbe Wahrheit.
        eval() wandelt naemlich kontextabhaengig um.
        "The eval method evaluates a string of JavaScript code in the context of the specified object."

        Gehoert habe ich das zwar auch schon mal, aber ich konnte mir leider nie so recht vorstellen, was damit gemeint sein soll. Das mit String->Rechenoperation war das einzige, was ich nachvollziehbar fand.

        Wenn in name "Bildchen" steht, dann macht in diesem Kontext
        eval(name + ".src") daraus Bildchen.src (Objekt mit Eigenschaft src)

        Gut, das habe ich verstanden. eval() liefert also ein Objekt abhaengig vom "Kontext" zurueck. Nur habe ich noch nicht verstanden, wozu man so etas braucht, in welchen Faellen es Sinn macht, so eine Konstruktion zu verwenden?

        Viele Gruesse
          Stefan Muenz

        1. Hallo Stefan und die anderen,

          Gut, das habe ich verstanden. eval() liefert also ein Objekt abhaengig vom "Kontext" zurueck. Nur habe ich noch nicht verstanden, wozu man so etas braucht, in welchen Faellen es Sinn macht, so eine Konstruktion zu verwenden?

          Dann lass mal bitte diesen Thread nicht gleich morgen im Archiv verschwinden.
          Ich bastele mal ein Beispiel. Ob mir da was Sinnvolles einfaellt, weiss ich noch nicht so genau. Aber auf alle Faelle denke ich, sowas mal in Aktion zu zeigen, hilft bestimmt dem einen oder anderen, besser zu verstehen.
          Einverstanden?

          Christine

          1. Ich bastele mal ein Beispiel.

            Hallo !

            Danke allen fuer die Antworten ! So ganz verstanden habe ichs noch nicht !
            ...oder doch ???  Nur noch mal zur Kontrolle....

            das eval macht in diesem Beispiel aus name+".src" ein  .src-objekt
            Ohne das eval wuerde es nur ein String werden , aber nicht als Objekt verstanden werden ??!

            Und in dem anderen Fall ? Da soll es nur ein String werden, daher ist das eval zu viel.

            Hab ichs verstanden ? Hab ichs ??

            Und wegen des Beispiels!!!!  Hier noch einmal die URL richtig http://www.ubisoft.com

            Dort einfach mal auf der Titelseite in den Quelltext sehen. Da ist ein Beispiel mit dem eval().

            Danke
               Torsten

            1. Hallo,

              Und wegen des Beispiels!!!!  Hier noch einmal die URL richtig http://www.ubisoft.com
              Dort einfach mal auf der Titelseite in den Quelltext sehen. Da ist ein Beispiel mit dem eval().

              Stimmt, ist recht anschaulich.
              Noch einmal? Stand der URL schon irgendwo? Verflixt, muss ich uebersehen haben. :-(

              das eval macht in diesem Beispiel aus name+".src" ein  .src-objekt
              Ohne das eval wuerde es nur ein String werden , aber nicht als Objekt verstanden werden ??!
              Und in dem anderen Fall ? Da soll es nur ein String werden, daher ist das eval zu viel.
              Hab ichs verstanden ? Hab ichs ??

              Sieht so aus :-)

              Christine