سؤال

وأريد أن تحقق في وظيفتي إذا حجة مرت من وجوه نوع فارغة أم لا. أحيانا كان فارغا ولكن لا يزال غير فارغة وبالتالي لا يمكن الاعتماد على حالة فارغة. هناك بعض الممتلكات مثل 'طول' / 'حجم' لكائنات المرنة التي يمكنني استخدامها هنا. الرجاء المساعدة. يرجع الفضل في ذلك مسبقا.

هل كانت مفيدة؟

المحلول

إذا كنت تقصد إذا كائن لا يوجد لديه خصائص:

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

وشيء آخر هو أن نلاحظ يمكنك استخدام بسيط للحلقة للتحقق من خلال خصائص الأجسام، أن ما تقوم به هذه الوظيفة 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