Подтвердить что ты не робот

AS3: проверка, является ли переменная типа объекта

Я хочу сделать что-то подобное в ActionScript 3:

if(variable is Object) ...;
else ...;

Где variable может быть String(), Number(), Array(), Object()...

В настоящее время вышеуказанная проверка возвращает true для всех этих типов, что имеет смысл. Я только хочу, чтобы он возвращал true для объектов, сделанных с помощью new Object().

Любая помощь будет очень признательна!

4b9b3361

Ответ 1

Вам следует попытаться использовать эти функции - getQualifiedClassName и typeof. Здесь код, показывающий, как они ведут себя для разных типов данных, которые вы указали, особенно важно для разницы в массивах и числах:

Код:

var o = new Array();                
trace ("var o = new Array()");
trace (getQualifiedClassName(o));
trace (typeof(o));      
var o = new Object();   
trace ("var o = new Object();");
trace (getQualifiedClassName(o));
trace (typeof(o));
var o = new String();
trace ("var o = new String()");
trace (getQualifiedClassName(o));
trace (typeof(o));
var o = new Number()
trace ("var o = new Number()");
trace (getQualifiedClassName(o));
trace (typeof(o));              
var o = 3.14;
trace ("var o = 3.14");
trace (getQualifiedClassName(o));
trace (typeof(o));

Результат:

var o = new Array()
Array
object
var o = new Object();
Object
object
var o = new String()
String
string
var o = new Number()
int
number
var o = 3.14
Number
number

Я предполагаю, что getQualifiedClassName будет тем, что вы ищете, что находится в пакете flash utils:

import flash.utils.getQualifiedClassName;

Ответ 2

Попробуйте что-то, основанное на одном из них:

if (variable.constructor.toString().match(/object/i) == 'Object')

if (variable.constructor.toString().indexOf("Object") != -1)

Если объектом является Object(), строка конструктора будет выглядеть как

function Object() { ... }

чтобы вы могли проверить это.

Ответ 3

Вы также можете использовать getQualifiedSuperclassName, который возвращает null для типа Object, поскольку у него нет суперкласса:

public static function isObject( obj:* ):Boolean
{
    if ( obj == null )
        return false;
    return ( getQualifiedSuperclassName( obj ) == null );
}

Ответ 4

здесь вы идете, попробуйте это.

var ob:Object = new Object();

trace(ob); //[object Object]
trace(typeof(ob) == "object"); //true

if(typeof(ob) == "object"){
    //true
}else{
    //false
}