Вопрос

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

Это было полезно?

Решение

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

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, а затем перечислить свойства, чтобы проверить заданные значения .... этот класс поможет:

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.as.

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

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

var i:int = myObject.hasProperty("length") ? myObject.length: 0;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top