문제

유형 객체의 전달 된 인수가 비어 있거나 그렇지 않은 경우 내 기능을 확인하고 싶습니다. 때로는 비어 있지만 여전히 null은 아니므로 널 상태에 의존 할 수 없습니다. 여기에서 사용할 수있는 플렉스 객체의 '길이'/'크기'와 같은 속성이 있습니까? 도와주세요. 미리 감사드립니다.

도움이 되었습니까?

해결책

객체에 속성이없는 경우 :

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');
}

당신의 대상이 무엇인지 또는 오히려 당신이 기대하는 것에 달려 있습니다. 예를 들어, 당신의 객체가 당신이 찾고있는 이름이라는 속성을 포함 해야하는 경우

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

주목해야 할 또 다른 사항은 단순한 루프를 사용하여 객체 속성을 통해 확인할 수 있다는 것입니다.

다음과 같이 직접 확인할 수 있습니다.

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