如果类型为object的传递参数为空,我想检查我的函数。有时它是空的但仍然不是null因此我不能依赖于null条件。是否有一些属性,如'长度'/'大小'的flex对象,我可以在这里使用。 请帮忙。 提前谢谢。
答案 0 :(得分:15)
如果您的意思是对象没有属性:
var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }
答案 1 :(得分:6)
这是一些严重的黑客攻击,但你可以使用:
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
答案 2 :(得分:5)
您也可以尝试:
ObjectUtil.getClassInfo(obj).properties.length > 0
关于它的好处是getClassInfo为您提供了有关该对象的更多信息,例如。你得到了对象中所有属性的名称,这可能会派上用场。
答案 3 :(得分:2)
如果object包含一些'text'但是as3不能将它识别为String,请将其转换为string并检查它是否为空。
var checkObject:String = myObject;
if(checkObject == '')
{
trace('object is empty');
}
答案 4 :(得分:0)
取决于您的对象是什么,或者更确切地说是您期望的对象。例如,如果您的对象应该包含您正在寻找的名为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函数正在做的事情。
答案 5 :(得分:0)
您可以直接查看,如下,
var obj:Object = new Object();
if(obj == null)
{
//Do something
}
答案 6 :(得分:0)
我从与JS有关的类似问题中偷走了这个。它需要FP 11+或JSON.as库。
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
答案 7 :(得分:-1)
可以使用hasProperty方法检查长度
var i:int = myObject.hasProperty("length") ? myObject.length: 0;