代码之家  ›  专栏  ›  技术社区  ›  Ashine

检查对象是否为空

  •  6
  • Ashine  · 技术社区  · 15 年前

    如果对象类型的传递参数为空,我想签入我的函数。有时它是空的,但仍然不为空,所以我不能依赖于空的条件。flex对象是否有“length”/“size”之类的属性,我可以在这里使用。 请帮忙。 事先谢谢。

    8 回复  |  直到 9 年前
        1
  •  15
  •   Simon Buchan    15 年前

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

    var isEmpty:Boolean = true;
    for (var n in obj) { isEmpty = false; break; }
    
        2
  •  6
  •   sharvey    15 年前

    这是一些严重的黑客行为,但您可以使用:

    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
    
        3
  •  5
  •   Robert Bak    15 年前

    您也可以尝试:

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

    它的好处是,getClassInfo提供了关于对象的更多信息,例如,您可以获得对象中所有属性的名称,这可能会很方便。

        4
  •  2
  •   Taro    14 年前

    如果对象包含一些“文本”,但AS3不将其识别为字符串,请将其转换为字符串并检查它是否为空。

    var checkObject:String = myObject;
    
    if(checkObject == '')
    {
      trace('object is empty');
    }
    
        5
  •  0
  •   JTtheGeek    15 年前

    取决于你的对象是什么,或者更确切地说,取决于你期望它拥有什么。例如,如果您的对象应该包含一些名为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函数所做的。

        6
  •  0
  •   Kans    9 年前

    您可以按如下方式直接检查,

    var obj:Object = new Object();
    if(obj == null)
    {
    //Do something
    }
    
        7
  •  0
  •   Eddie    9 年前

    我从一个与JS相关的类似问题中偷了这个。它需要fp 11+或json.as库。

    function isEmptyObject(obj){
        return JSON.stringify(obj) === '{}';
    }
    
        8
  •  -1
  •   AndrewB    15 年前

    无法使用HasProperty方法检查长度

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