Problem mit Opera bei asoziativem Array

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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.

    Comment


    • #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

      Comment


      • #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.

        Comment


        • #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

          Comment


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

            Comment


            • #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

              Comment


              • #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

                Comment


                • #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

                  Comment


                  • #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()
                    Last edited by onemorenerd; 16-10-2007, 20:49.

                    Comment


                    • #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

                      Comment

                      Working...
                      X