15 Stimmen

Was ist in Actionscript 3 der Unterschied zwischen dem Operator "in" und der Methode "hasOwnProperty"?

Der "in"-Operator und die "hasOwnProperty"-Methoden scheinen austauschbar zu sein, aber ich frage mich, ob eine für vererbte Eigenschaften oder etwas überprüft und die andere nicht oder so etwas. Ich interessiere mich besonders für den Fall der Verwendung mit einem Dictionary, aber ich bezweifle, dass es sich von anderen Verwendungen unterscheidet.

"hasOwnProperty" wird in den offiziellen Dokumenten beschrieben [aquí](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Object.html#hasOwnProperty()) und "in" wird beschrieben aquí aber wenn es einen Unterschied gibt, dann ist er mir nicht ganz klar geworden.

14voto

Michael Meyer Punkte 291

Das Vertrauen in die liebgewonnene Antwort hat mich in der Tat in Schwierigkeiten gebracht. Es scheint sich um mehr zu handeln als nur um prototypische Unterschiede. Ich habe festgestellt, dass

hasOwnProperty kann nicht verwendet werden, um festzustellen, ob ein Schlüssel in einem Dictionary vorhanden ist, wenn dieser Schlüssel ein Referenztyp ist, aber der in-Operator kann dies.

Hier ist ein Beispiel zur Veranschaulichung.

Code:

var test:Function = function(key:*,label:String):void
    {
        var d:Dictionary = new Dictionary(true);
        d[key] = true;
        trace(label);
        trace("  hasOwnProperty: " + (d.hasOwnProperty(key)?"true":"false <== !!PROBLEM!!"));
        trace("  in: " + (key in d));
        trace("  []: " + d[key]);
    };
test({}, "indexed by object");
test("string", "key is string");
test(0, "key is number");
test(true, "key is boolean");

Ergebnisse:

indexed by object
  hasOwnProperty: false <== !!PROBLEM!!
  in: true
  []: true
key is string
  hasOwnProperty: true
  in: true
  []: true
key is number
  hasOwnProperty: true
  in: true
  []: true
key is boolean
  hasOwnProperty: true
  in: true
  []: true

4voto

Tyler Egeto Punkte 5475

Die Änderung, von der ich weiß, ist in sucht die Prototypenkette auf, während hasOwnProperty nicht, die meisten AS3-Entwickler verwenden den Prototyp nicht, daher ist er für den täglichen Gebrauch nicht so relevant.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X