Problem mit Opera bei asoziativem Array

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Opera bei asoziativem Array

    kann mir einer erklären, warum der opera hier die reihenfolge ändert?
    PHP-Code:
    var tmp = new Array ();
    tmp["456"] = 'blubb';
    tmp["789"] = 'blubber';
    tmp["123"] = 'schwall';
      
    for (
    i in tmp)
    {
      
    alert (i);

    ergibt im ie und ff:
    - 456
    - 789
    - 123

    im opera aber
    - 123
    - 456
    - 789

    versucht der das als numerisches array zu erfassen, oder was bitte soll das sein? ach ja bei einfachen anführungszeichen ist das problem das selbe.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    Javascript kennt keine assoziativen Arrays. Sogesehen verhalten sich also IE und FF nonkonform.

    Kommentar


    • #3
      Javascript kennt keine assoziativen Arrays
      ich weiss, das sind nur objekte.
      Sogesehen verhalten sich also IE und FF nonkonform.
      ie kenne ich ja schon, aber ff? das ist mir neu.

      danke für den hinweis
      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Original geschrieben von Kropff
        ich weiss, das sind nur objekte.
        Javascript castet auch nicht automatisch. Wenn du ein Objekt haben möchtest, darfst du nicht new Array() schreiben.

        Kommentar


        • #5
          Wenn du ein Objekt haben möchtest, darfst du nicht new Array() schreiben.
          ein normales Array hat auch den selben effekt, daher habe ich das mal ausprobiert.

          gruß
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Jetzt bin ich verwirrt. Was ist denn ein normales Array und was nicht?

            Kommentar


            • #7
              PHP-Code:
              var tmp = new Array ();
              var 
              tmp = Array(); 
              frag mich bitte nicht nach dem unterschied, ich lerne noch ist in javascript alles sehr gewöhnungsbedürftig und ich versuche gerade mich sehr viel tiefer in die materie einzuarbeiten.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Nicht erschrecken, es geht noch anders:
                var tmp = ['foo', 'bar'];

                Strings und Objekte bieten ähnlichen Spaß:
                var tmp = "foo";
                var tmp = String("foo");
                var tmp = new String("foo");
                var tmp = {};
                var tmp = new Object();

                Bei den Varianten ohne new werden Primitives erzeugt. Zwischen diesen und den echten Objekten konvertiert JS automatisch.

                Beispiel: Wenn du ein Array mit [] erzeugst und dann auf dessen length-Property zugreifst, wird JS aus dem Primitive ein temporäres Array-Objekt erzeugen, dessen length lesen und dann das temp. Objekt wegwerfen.

                Sowas steht allerdings nicht auf SelfHTML.
                http://developer.mozilla.org/en/docs/JavaScript

                Kommentar


                • #9
                  Original geschrieben von onemorenerd
                  var tmp = ['foo', 'bar'];
                  Ist das nicht dann ein Hash?
                  afaik war da sowas ... nagelt mich nur nicht drauf fest, die Basen von Javascript finde ich ätzend~

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Falls du mit Hash so etwas wie ein assoziatives Array meinst, also eine Struktur, deren Elemente über frei definierbare Schlüssel/Indizes ansprechbar sind, dann irrst du dich.
                    Javascript kennt wie gesagt keine assoz. Arrays (alias Hashes). Aber das gewünschte tmp['thisIndex'] kann man erreichen, wenn tmp ein Object() ist und um eine Property thisIndex erweitert wurde.
                    Man kann nämlich jedem Object() beliebige Properties hinzufügen und diese sowohl mit tmp.thisIndex als auch mit tmp['thisIndex'] ansprechen.

                    Objects kann man auch so erzeugen:
                    var tmp = { foo: bar, bla: blubb };

                    Aber Spitz pass auf: Das wird kein Array!

                    EDIT:
                    Wer behauptet, das wäre pingelig, der kann mich mal .reverse()
                    Zuletzt geändert von onemorenerd; 16.10.2007, 21:49.

                    Kommentar


                    • #11
                      mhm... stimmt, die Hash-Funktionalität ist von Prototype~

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar

                      Lädt...
                      X