2009-12-11 12 views
18

que quiero hacer algo como esto en Actionscript 3:AS3: Analizar si una variable es del tipo de objeto

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

Dónde variable podría ser una String(), Number(), Array(), Object() ...

Actualmente, la verificación anterior devuelve verdadero para todos estos tipos, lo que tiene sentido. Sin embargo, solo quiero que vuelva verdadero para objetos hechos con new Object().

¡Cualquier ayuda sería muy apreciada!

Respuesta

34

Debe intentar utilizar estas funciones - getQualifiedClassName y typeof. Aquí hay un código que muestra cómo se comportan los diferentes tipos de datos que ha enumerado, ver la diferencia de la matriz y los números en especial:

Código:

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)); 

Resultado:

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 

Supongo que getQualifiedClassName sería lo que estás buscando, que está en el paquete flash utils:

import flash.utils.getQualifiedClassName; 
+0

Sí, en realidad descubrió getQualifiedClassName poco después, y de hecho es lo que estaba buscando. ¡Gracias por la respuesta! –

5

Probar algo en torno a uno de estos:

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

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

Si el objeto es un objeto() la cadena de constructor será algo así como

function Object() { ... } 

para que pueda comprobar para eso.

3

También puede utilizar getQualifiedSuperclassName que devuelve null para el tipo Object, ya que no tiene una superclase:

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

aquí tienes, intento esto ..

var ob:Object = new Object(); 

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

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