Чтобы проверить, является ли объект пустым или нет - PullRequest
6 голосов
/ 26 октября 2009

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

Ответы [ 8 ]

15 голосов
/ 26 октября 2009

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

var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }
6 голосов
/ 26 октября 2009

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

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
5 голосов
/ 29 октября 2009

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

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

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

2 голосов
/ 03 декабря 2010

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

var checkObject:String = myObject;

if(checkObject == '')
{
  trace('object is empty');
}
0 голосов
/ 31 декабря 2015

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

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}
0 голосов
/ 27 мая 2015

Вы можете напрямую проверить это следующим образом,

var obj:Object = new Object();
if(obj == null)
{
//Do something
}
0 голосов
/ 27 октября 2009

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

var i:int = myObject.hasProperty("length") ? myObject.length: 0;
0 голосов
/ 27 октября 2009

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

...