Чтобы проверить, является ли объект пустым или нет

Я хочу проверить свою функцию, если переданный аргумент типа object пуст или нет. Иногда он пуст, но все же не нулевой, поэтому я не могу полагаться на нулевое условие. Есть ли какое-то свойство, такое как "длина" / "размер" для объектов flex, которые я могу использовать здесь. Пожалуйста помочь. Спасибо заранее.

8 ответов


Если вы имеете в виду, если объект не имеет свойств:

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

Это какой-то серьезный хак, но вы можете использовать:

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

вы также можете попробовать:

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

хорошо, что getClassInfo дает вам гораздо больше информации об объекте, например. вы получаете имена всех свойств в объекте, которые могут пригодиться.


Если объект содержит некоторый "текст", но as3 не распознает его как строку, преобразуйте его в строку и проверьте, пуст ли он.

var checkObject:String = myObject;

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

зависит от того, что ваш объект, или скорее, то, что вы ожидаете его. Например, если ваш объект должен содержать некоторое свойство с именем 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, затем перечислить через свойства для проверки установленных значений.... этот класс помогите!--4-->

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.


вы можете сразу проверить его как следует,

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

Я украл это из аналогичного вопроса, касающегося JS. Для этого требуется FP 11+ или JSON.как библиотека.

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

можно использовать метод hasProperty для проверки длины

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