AS3: проверка, является ли переменная типа объекта
Я хочу сделать что-то подобное в ActionScript 3:
if(variable is Object) ...;
else ...;
Где variable
может быть String()
, Number()
, Array()
, Object()
...
В настоящее время вышеуказанная проверка возвращает true для всех этих типов, что имеет смысл. Я только хочу, чтобы он возвращал true для объектов, сделанных с помощью new Object()
.
Любая помощь будет очень признательна!
Ответы
Ответ 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
}