물체가 비어 있는지 확인하려면
-
06-07-2019 - |
문제
유형 객체의 전달 된 인수가 비어 있거나 그렇지 않은 경우 내 기능을 확인하고 싶습니다. 때로는 비어 있지만 여전히 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;