tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von CPoly
  • 1 Beitrag von CPoly
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
232
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Netzwerkidi Netzwerkidi ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    237
    Blog-Einträge
    1
    Hallo in die Runde,

    mal eine Frage an die Cracks: mit dem IN-Operator kann man offenbar in Objekten die Existenz von Werten checken. D. h. man muss nicht im Loop dadurch, sondern lässt das den IN-Operator machen. Warum geht das mit dem Array nicht auch, bzw. wie mache ich es?

    Danke + Grüße
    Idi

    HTML-Code:
    <html>
      <head>
        <title></title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta http-equiv='Content-Language' content='de-DE' />
    
      <script type="text/javascript">
      
        var div = document.createElement('div');
        for (prop in div.style) {
          if (div.style[prop]!="") 
            alert(prop+"="+div.style[prop]);
        }
        
        var arr1 = {a:'1',b:'2'};
        alert('a' in arr1);
        
        var arr2 = ['a','b'];
        alert('a' in arr2);
        
      </script>  
      </head>
      <body>
      </body>
    </html>
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Es geht auch mit Array, aber der in-Operator prüft, ob ein Schlüssel vorhanden ist, nicht aber ein Wert. In einem Array sind die Schlüssel Zahlen!

    Code javascript:
    1
    2
    3
    4
    
    var arr2 = ['a','b'];
    alert(0 in arr2);
    alert(1 in arr2);
    alert(2 in arr2);

    Übrigens gibt es neben dem in-Operator auch die "hasOwnProperty" Methode.

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    
    var arr1 = {a:'1',b:'2'};
    alert(arr1.hasOwnProperty('a'));
     
    var arr2 = ['a','b'];
    alert(arr2.hasOwnProperty(0));
    alert(arr2.hasOwnProperty(1));
    alert(arr2.hasOwnProperty(2));


    Beides ist nicht exakt identisch. Wenn man weiß, was man tut, kann man beide richtig einsetzen.

    Code javascript:
    1
    2
    3
    
    var arr = {};
    alert('toString' in arr);
    alert(arr.hasOwnProperty('toString'));
    Netzwerkidi bedankt sich. 

  3. #3
    Netzwerkidi Netzwerkidi ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    237
    Blog-Einträge
    1
    Hai CPoly,
    beim ersten Beispiel hau ich mir getz mit die Hand vor den Detz: na klar, stimmt ja!!
    Aber property hätte ich jetzt eher mit Eigenschaften im Sinne von Methoden in Verbindung gebracht.
    Obwohl, na ja, beim Objekt auch irgendwie. Das letzte Beispiel verdeutlicht meinen Konflikt wohl am besten: als "property"-Wert nicht existent, aber als Methode.
    Wieder was gelernt!
    Merrßi+Grüße
    Idi

    Nachtrag: hasOwnProperty scheint auch sicherer zu sein, denn:
    invalid 'in' operand stringValue
    http://www.bennadel.com/blog/1918-Ja...th-Strings.htm
    Geändert von Netzwerkidi (02.12.11 um 19:48 Uhr)
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Der Blog Eintrag ist einfach nur falsch. Er behauptet, es würde mit Zahlen funktionieren, erstellt aber explizit eine Instanz von der Klasse "Number". Das ist aber etwas anderes, als eine Zahl hin zuschreiben. Hätte er das mit String genauso gemacht, würde auch der in-Operator funktionieren.

    Code javascript:
    1
    
    var stringValue = new String("");

    Der in Operator funktioniert mit allen Objekten.

    Code javascript:
    1
    2
    
    alert(typeof "");
    alert(typeof new String(""));

    Edit: Das steht auch so in den Kommentaren zu dem Blogeintrag!


    Zitat Zitat von Netzwerkidi Beitrag anzeigen
    Das letzte Beispiel verdeutlicht meinen Konflikt wohl am besten: als "property"-Wert nicht existent, aber als Methode.
    Nein, du musst genau aufpassen. Es heißt hasOwnProperty und nicht hasProperty! Das liefert true, wenn die Klasse diese Eigenschaft hat. Aber nicht, wenn eine der Eltern diese hat! "toString" ist eine Basis Eigenschaft von Objekten. Zwar hat jedes andere Objekt (z.B. eine Klasse Namens "Katze") auch eine toString Methode, aber hasOwnProperty ist false. Es sei denn, du überschreibst toString für deine Katze-Klasse.
    Geändert von CPoly (02.12.11 um 20:03 Uhr)
    Netzwerkidi bedankt sich. 

  5. #5
    Netzwerkidi Netzwerkidi ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    237
    Blog-Einträge
    1
    Lass mich raten, das Weizenbier ist ohne Allehohl?

    Interessant, dass offenbar ein Deutscher ("Martin Mädler") "die Nadel" auf seinen Fehler hinweist
    Apropos: "Die Nadel" - GUTER FILM!

    Merrßi
    Geändert von Netzwerkidi (02.12.11 um 21:37 Uhr)
     

  6. #6
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von Netzwerkidi Beitrag anzeigen
    Lass mich raten, das Weizenbier ist ohne Allehohl?
    Ne ne. Hätte ich jetzt Weizenbier intus, dann wäre die Antwort anders ausgefallen :-D

    Zitat Zitat von Netzwerkidi Beitrag anzeigen
    Apropos: "Die Nadel" - GUTER FILM!
    Noch nie davon gehört. Vielleicht komme ich ja mal dazu.
     

  7. #7
    Netzwerkidi Netzwerkidi ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    237
    Blog-Einträge
    1
     

Ähnliche Themen

  1. Objekt auf Existenz prüfen
    Von A319 im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 17.06.08, 00:13
  2. Auf Datei Existenz Prüfen...
    Von wOp im Forum Visual Basic 6.0
    Antworten: 9
    Letzter Beitrag: 27.07.05, 22:45
  3. Dateipfad auf Existenz prüfen
    Von jorgeHX im Forum Java
    Antworten: 2
    Letzter Beitrag: 30.06.05, 14:57
  4. Registryeintrag auf Existenz prüfen
    Von DerStatist im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 24.03.05, 14:33
  5. session_start() auf existenz prüfen ?
    Von methodus im Forum PHP
    Antworten: 6
    Letzter Beitrag: 20.04.02, 22:50