Frage

Ich möchte in meiner Funktion überprüfen, ob ein übergebene Argument vom Typ Objekt leer ist oder nicht. Manchmal ist es leer, aber noch nicht null so kann ich nicht auf null Zustand verlassen. Gibt es eine Eigenschaft wie ‚Länge‘ / ‚Größe‘ für Flex-Objekte, die ich hier verwenden kann. Bitte helfen. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Wenn Sie meinen, wenn ein Objekt keine Eigenschaften hat:

var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }

Andere Tipps

Dies ist einige ernsthafte Hack, aber Sie können verwendet werden:

Object.prototype.isEmpty = function():Boolean {
    for(var i in this)
        if(i != "isEmpty")
            return false
    return true
}

var p = {};
trace(p.isEmpty()); // true
var p2 = {a:1}
trace(p2.isEmpty()); // false

Sie können auch versuchen:

ObjectUtil.getClassInfo(obj).properties.length > 0

Das Gute daran ist, dass getClassInfo Sie viel mehr Informationen über das Objekt gibt, zum Beispiel. Sie erhalten die Namen aller Objekte im Objekt, das sich als nützlich erweisen könnten.

Wenn das Objekt enthält einigen ‚Text‘ aber AS3 nicht erkennt es als String, wandelt es in String und prüfen, ob es leer ist.

var checkObject:String = myObject;

if(checkObject == '')
{
  trace('object is empty');
}

Abhängig von, was Ihre Aufgabe ist es, oder vielmehr das, was Sie erwarten, es zu haben. Zum Beispiel, wenn Ihr Objekt soll eine Eigenschaft genannt Namen enthalten, die Sie suchen, könnten Sie tun

if(objSomeItem == null || objSomeItem.name == null || objSomeItem.name.length == 0)
{
 trace("object is empty");
}

oder, wenn Ihr Objekt soll eigentlich etwas anderes sein, wie ein Array Sie tun können,

var arySomeItems = objSomeItem as Array;
if(objSomeItem == null || arySomeItems == null || arySomeItems.length == 0)
{
  trace("object is empty");
}

Sie auch andere Möglichkeiten, um durch Reflexion, wie ObjectUtil.getClassInfo verwenden könnten, dann aufzählen durch die Eigenschaften für Sollwerte zu überprüfen .... diese Klasse help:

import flash.utils.describeType;
import flash.utils.getDefinitionByName;

public class ReflectionUtils 
{
    /** Returns an Array of All Properties of the supplied object */
    public static function GetVariableNames(objItem:Object):Array
    {
        var xmlPropsList:XMLList = describeType(objItem)..variable;
        var aryVariables:Array = new Array();
        if (xmlPropsList != null)
        {
            for (var i:int; i < xmlPropsList.length(); i++)
            {
                aryVariables.push(xmlPropsList[i].@name);
            }
        }

        return aryVariables;
    }

    /** Returns the Strongly Typed class of the specified library item */
    public static function GetClassByName($sLinkageName:String):Class
    {
        var tObject:Class = getDefinitionByName($sLinkageName) as Class;
        return tObject;
    }

    /** Constructs an instance of the speicified library item */
    public static function ConstructClassByName($sLinkageName:String):Object
    {
        var tObject:Class = GetClassByName($sLinkageName);
        //trace("Found Class: " + tMCDefinition);
        var objItem:* = new tObject();
        return objItem;
    }

    public static function DumpObject(sItemName:String, objItem:Object):void
    {
        trace("*********** Object Dump: " + sItemName + " ***************");
        for (var sKey:String in objItem)
        {
            trace("    " + sKey +": " + objItem[sKey]);
        }
    }
    //}
}

Eine andere Sache zu beachten ist, dass Sie eine einfache verwenden können, für eine Schleife über Objekte Eigenschaften zu überprüfen, das ist, was diese dumpobject Funktion tut.

Sie können es wie folgt direkt überprüfen,

var obj:Object = new Object();
if(obj == null)
{
//Do something
}

Ich habe dies aus einer ähnlichen Frage zu JS beziehen. Es erfordert FP 11+ oder eine JSON.as Bibliothek.

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

kann die hasProperty Methode verwenden, um Länge zu überprüfen

var i:int = myObject.hasProperty("length") ? myObject.length: 0;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top