Проверять, пуст ли объект или нет

Вы могли бы хотеть смотреть на Dan Kegel" проблема C10K " веб-страница об обработке нескольких источников/приемников данных.

В основном лучше использовать минимальные потоки, которые в сокетах могут быть сделаны в w/большей части ОС некоторая система событий (или асинхронно в Windows с помощью IOCP).

то, Когда Вы сталкиваетесь со случаем, где ОС и/или библиотеки не предлагают способ выполнить коммуникацию не блокирующимся способом, лучше использовать пул потоков для обработки их при сообщении тому же циклу событий.

схема В качестве примера расположения:

Per CPU [*] EVENTLOOP   ------ Handles nonblocking I/O using OS/library utilities
                       |                        \___  Threadpool for various blocking events
                       Threadpool for handling the I/O messages that would take long

6
задан Jacob Poul Richardt 27 October 2009 в 00:31
поделиться

5 ответов

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

var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }
15
ответ дан 8 December 2019 в 03:53
поделиться

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

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
6
ответ дан 8 December 2019 в 03:53
поделиться

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

0
ответ дан 8 December 2019 в 03:53
поделиться

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

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

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

5
ответ дан 8 December 2019 в 03:53
поделиться

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

var i:int = myObject.hasProperty("length") ? myObject.length: 0;
-1
ответ дан 8 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: