Pergunta

Eu quero verificar na minha função se um argumento passado do tipo de objeto está vazio ou não. Às vezes é vazia, mas ainda não nulo, portanto, eu não posso confiar na condição nula. Existe alguma propriedade como 'length' / 'tamanho' para objetos Flex que eu posso usar aqui. Por favor ajude. Agradecemos antecipadamente.

Foi útil?

Solução

Se você quer dizer se um objeto não tem propriedades:

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

Outras dicas

Este é algum hack grave, mas você pode usar:

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

Você também pode tentar:

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

A coisa boa sobre isso é que GetClassInfo lhe dá muito mais informações sobre o objeto, por exemplo. você obter os nomes de todas as propriedades no objeto, que pode vir a calhar.

Se o objeto contém alguns 'texto', mas as3 não reconhece-lo como um String, convertê-lo para string e verifique se ele está vazio.

var checkObject:String = myObject;

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

Depende do que o seu objecto é, ou melhor, o que você espera que ele tem. Por exemplo, se o objeto deve conter alguma propriedade chamou o nome que você está procurando, você pode fazer

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

ou se o objeto é realmente suposto ser outra coisa, como um array que você poderia fazer

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

Você também pode usar outras maneiras através da reflexão, como ObjectUtil.getClassInfo, em seguida, enumerar as propriedades para verificar se há valores definidos .... essa classe de ajuda:

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]);
        }
    }
    //}
}

Outra coisa a notar é que você pode usar um loop for simples de verificar através de um propriedades de objetos, isso é o que esta função dumpobject está fazendo.

Você pode verificá-lo diretamente como segue,

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

Eu roubei isto de uma pergunta semelhante relativo a JS. Ela exige FP 11+ ou uma biblioteca JSON.as.

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

pode usar usar o método hasProperty para verificar comprimento

var i:int = myObject.hasProperty("length") ? myObject.length: 0;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top