WernerK: JS Objekt ansprechen , durchlaufen?

Hallo, ich schaue mir gerade einen HTML Code an der auch umfangreichen JS Code hat. Es gibt dort unter anderem ein Objekt "UploadOptions". Ich bin jetzt nicht so der JS Experte; Wie kann man denn das Objekt ansprechen bzw. herausfinden wie es aufgebaut ist, ohne den gesamten Code zu durchforsten bzw. wenn man es nicht kennt? Ich dachte ich versuche es mal mit

var i;
for(i in UploadOptions)
{
  alert(UploadOptions[i]);
} 

Es kommt jedoch nur einmal die Meldung [object Object]

Gruss Werner

  1. Tach!

    Wie kann man denn das Objekt ansprechen bzw. herausfinden wie es aufgebaut ist, ohne den gesamten Code zu durchforsten bzw. wenn man es nicht kennt?

    • Entwicklertools des Browsers aktivieren
    • Breakpoint an eine Stelle setzen, an der das Objekt existiert, am besten wenn es sich in dem Zustand befindet, in dem man es untersuchen möchte
    • den Browser veranlassen, den Code auszuführen
    • wenn der Breakpoint erreicht wurde, in die Konsole (der Entwicklertools) gehen und console.log(variablenname) eingeben, alternativ Maus auf die Variable im Code halten.

    dedlfix.

    1. Hallo,

      tja das ist nicht so ganz einfach weil es sich hier um keinen normalen Browser handelt sondern um ein Display an einem Gerät mit einem eigenen Browser :-)

      Danke Gruss Werner

      1. Tach!

        tja das ist nicht so ganz einfach weil es sich hier um keinen normalen Browser handelt sondern um ein Display an einem Gerät mit einem eigenen Browser :-)

        Hmm, dann Trick 17:

        alert(JSON.stringify(dein_object));
        

        Wobei es sein kann, dass sich das Objekt dagegen "wehrt", wenn es eine toJSON()-Methode hat, die irgendwas anderes als die Eigenschaften des Objekts zurückgibt.

        dedlfix.

        1. Hallo, ich wollte keinen neuen Thread aufmachen, daher hier die Frage. Ich konnte im Self Wiki nichts finden und auch sonst nicht (vielleicht fehlte mir auch der richtige Suchbegriff) Eine normale Variablen Zuweisung ist ja meist so.

          var name = "Müller";
          

          Jetzt habe ich in einem JS Code folgendes gesehen:

          var test = createOp() , upload;
          

          Was wird denn hier gemacht? Der Return Wert der Funktion createOp() wird in die Variable test geschrieben? aber was macht das Komma upload dahinter? Ist es dann keine normale Variable mehr?

          Noch undurchsichtiger für mich ist folgendes:

          var color = $( 'input[name="color"]:checked' ).val(),
                   destination = $( 'input[name="destination"]:checked' ).val(),
                  Options = {
                    "Setting":{
                      "Device": "auto",
                      "originalSide": originalSide,
                      "Resolution": resolution,
                      "Color": color,
                      "fileSetting": {}
                    }
                  },
                  email,destinationSetting;
          

          Hier werden der Variablen "color" offensichtlich mehrere Dinge zugewiesen? Was hat es mit dem Options = { "Setting":{ auf sich? Ist das ein JSON Objekt?

          Gruss Werner

          1. Tach!

            Jetzt habe ich in einem JS Code folgendes gesehen:

            var test = createOp() , upload;
            

            Was wird denn hier gemacht? Der Return Wert der Funktion createOp() wird in die Variable test geschrieben?

            Ja.

            aber was macht das Komma upload dahinter? Ist es dann keine normale Variable mehr?

            Kommagetrennt kann man weitere Variablen anlegen. In dem Fall wird außerdem upload angelegt, aber (an dieser Stelle) kein Wert zugewiesen.

            Noch undurchsichtiger für mich ist folgendes:

            Dasselbe in grün, auch hier werden mehrere Variablen mit einer var-Anweisung angelegt, teilweise mit, teilweise ohne Zuweisung.

            Was hat es mit dem Options = { "Setting":{ auf sich? Ist das ein JSON Objekt?

            Nein, das ist ein normales Javascript-Objekt. JSON hat sich nur einer sehr ähnlichen Syntax bedient.

            dedlfix.

            1. @@dedlfix

              var test = createOp() , upload;
              

              Kommagetrennt kann man weitere Variablen anlegen. In dem Fall wird außerdem upload angelegt, aber (an dieser Stelle) kein Wert zugewiesen.

              Gibt es – außer der Schreibweise – noch irgendeinen Unterschied zu folgendem?

              var test = createOp();
              var upload;
              

              LLAP 🖖

              --
              „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
              „Hat auf dem Forum herumgelungert …“
              (Wachen in Asterix 36: Der Papyrus des Cäsar)
              1. Gibt es – außer der Schreibweise – noch irgendeinen Unterschied zu folgendem?

                var test = createOp();
                var upload;
                

                Nein, die Semantik ist identisch.

                1. Hallo 1unitedpower,

                  Gibt es – außer der Schreibweise – noch irgendeinen Unterschied zu folgendem?

                  var test = createOp();
                  var upload;
                  

                  Nein, die Semantik ist identisch.

                  aber

                  var test = 5;
                      summe = 0;
                  

                  und

                  var test = 5,
                      summe = 0;
                  

                  sind hinsichtlich des Scopes dennoch unterschiedlich.

                  Bis demnächst
                  Matthias

                  --
                  Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
                  1. Tach!

                    Gibt es – außer der Schreibweise – noch irgendeinen Unterschied zu folgendem?

                    var test = createOp();
                    var upload;
                    

                    Nein, die Semantik ist identisch.

                    aber

                    var test = 5;
                        summe = 0;
                    

                    und

                    var test = 5,
                        summe = 0;
                    

                    sind hinsichtlich des Scopes dennoch unterschiedlich.

                    Das ist ja auch andere Syntax. Aber ich sehe, du wolltest nur auf den Punkt aufmerksam machen, über den man stolpern kann.

                    Übrigens, einige IDEs und auch Tools wie JSLint machen einen auf solche Fälle aufmerksam, wenn man versucht eine globale Variable anzulegen, ohne dass diese im globalen Scope bekanntgemacht wurde.

                    dedlfix.

                    1. Hallo,

                      wie schreibt ihr Profis das? Ich persönlich finde einfach:

                      var test = createOp();
                      var upload;
                      

                      etwas lesbarer. Aber vielleicht ist das auch Old Scool :-)

                      Gruss Werner

                      1. Tach!

                        wie schreibt ihr Profis das? Ich persönlich finde einfach:

                        var test = createOp();
                        var upload;
                        

                        etwas lesbarer.

                        Ich mach das auch so. Es ist zwar geringfügig mehr zu tippen, dafür kann ich aber komplette Anweisungen kopieren und anderswo einfügen. Bei der Komma-Schreibweise muss man mehr fummeln, um dort etwas zu extrahieren und anschließend die Kommas wieder korrekt anzuordnen.

                        dedlfix.

                      2. Hi,

                        Ich persönlich finde einfach:

                        var test = createOp();
                        var upload;
                        

                        etwas lesbarer. Aber vielleicht ist das auch Old Scool :-)

                        das hat nichts mit Oldschool zu tun; ich finde es auch übersichtlicher, so wie du es hier gezeigt hast. Aber letztendlich ist es eine Frage der Gewohnheit. Und gewöhnen sollte man sich am besten an die Schreibweise, bei der man am wenigsten Gefahr läuft, Fehler zu machen.

                        So long,
                         Martin

                      3. Hallo,

                        wie schreibt ihr Profis das?

                        Es ist auch eine Frage der Zusammengehörigkeit. Ein

                        var langidude, laddidude
                        

                        finne ich ok, weils eben das eine nich ohne das andere gibb.
                        Ansonsten aber lieber ne Zeile mehr.

                        Gruß
                        Kalk

                      4. Hallo

                        wie schreibt ihr Profis das? Ich persönlich finde einfach:

                        var test = createOp();
                        var upload;
                        

                        etwas lesbarer.

                        Zunächst einmal habe ich mir angewöhnt, Variablen aufgrund ihres Gültigkeitsbereichs grundsätzlich am Anfang einer Funktion zumindest zu deklarieren, auch wenn die Definition, also die Zuweisung eines Wertes, gegebenenfalls erst später erfolgt.

                        Davon abgesehen hängt die Art der Notation bei mir von den Umständen im Einzelfall ab, das heißt, wenn zum Beispiel nur wenige Variablen benötigt werden, schreibe ich es durchaus so:

                        var getProperties = function (object) {
                          var names = Object.getOwnPropertyNames(object), i;
                          // ...
                        };
                        

                        …wobei ich Definitionen gewohnheitsmäßig vor reinen Deklarationen notiere.

                        Das Beispiel ist zwar nicht wirklich sinnvoll, da eine Zählvariable hier kaum benötigt würde, aber der Punkt ist, dass ich in solchen Fällen das Ganze in eine Zeile schreibe, damit sofort klar ist, dass es sich hier um eine zusammengesetzte Anweisung handelt, wodurch das Risiko minimiert wird, dass ich versehentlich eine globale Variable produziere.

                        Wenn die Zeile aber zu breit und mithin zu unübersichtlich zu werden droht, verzichte ich üblicherweise auf die Kommasetzung und schreibe es aus:

                        var names = Object.getOwnPropertyNames(object);
                        var output = document.getElementById('output');
                        // ...
                        

                        Die Ausnahme von der Regel wäre dann bei mir, wenn sehr viele Variablen benötigt werden, diese sich aber semantisch gruppieren lassen, so dass in meinem Code auch solche Konstrukte auftauchen:

                        var rotateX = 10,
                            rotateY = 25,
                            rotateZ = 42;
                        
                        var translateX = -33,
                            translateY = 17,
                            translateZ = 0;
                        
                        var posX = position[0],
                            posY = position[1],
                            posZ = position[2];
                        
                        var speed = 5.5;
                        
                        // ...
                        

                        Aber wie auch immer, ich schließe mich dem an, was Der Martin gesagt hat: „Gewöhnen sollte man sich am besten an die Schreibweise, bei der man am wenigsten Gefahr läuft, Fehler zu machen.“

                        Gruß,

                        Orlok