检查对象是否为空

时间:2009-10-26 09:32:17

标签: flex actionscript-3 actionscript collections flex3

如果类型为object的传递参数为空,我想检查我的函数。有时它是空的但仍然不是null因此我不能依赖于null条件。是否有一些属性,如'长度'/'大小'的flex对象,我可以在这里使用。 请帮忙。 提前谢谢。

8 个答案:

答案 0 :(得分:15)

如果您的意思是对象没有属性:

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

答案 1 :(得分:6)

这是一些严重的黑客攻击,但你可以使用:

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

答案 2 :(得分:5)

您也可以尝试:

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

关于它的好处是getClassInfo为您提供了有关该对象的更多信息,例如。你得到了对象中所有属性的名称,这可能会派上用场。

答案 3 :(得分:2)

如果object包含一些'text'但是as3不能将它识别为String,请将其转换为string并检查它是否为空。

var checkObject:String = myObject;

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

答案 4 :(得分:0)

取决于您的对象是什么,或者更确切地说是您期望的对象。例如,如果您的对象应该包含您正在寻找的名为name的属性,则可以执行

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

或者你的对象实际上应该是别的东西,比如你可以做的数组

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

您还可以通过反射使用其他方式,例如ObjectUtil.getClassInfo,然后通过属性枚举来检查设置值....此类帮助:

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

另外需要注意的是,你可以使用一个简单的for循环来检查对象属性,这就是dumpobject函数正在做的事情。

答案 5 :(得分:0)

您可以直接查看,如下,

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

答案 6 :(得分:0)

我从与JS有关的类似问题中偷走了这个。它需要FP 11+或JSON.as库。

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

答案 7 :(得分:-1)

可以使用hasProperty方法检查长度

var i:int = myObject.hasProperty("length") ? myObject.length: 0;