AS3: vérifier si une variable est du type D'objet

je veux faire quelque chose comme cela en Actionscript 3:

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

variable peut être String(), Number(),Array(),Object()...

actuellement la vérification ci-dessus retourne true pour tous ces types, ce qui est logique. Je veux seulement qu'il retourne true pour les objets faits avec new Object(), cependant.

Toute aide serait grandement appréciée!

18
demandé sur Tapio Saarinen 2009-12-11 03:54:13

4 réponses

Vous devriez essayer d'utiliser ces fonctions - getQualifiedClassName et typeof. Voici un code montrant comment ils se comportent pour les différents types de données que vous avez énumérés, voir la différence pour le tableau et les nombres en particulier:

Code:

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

Résultat:

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

je suppose que getQualifiedClassName serait ce que vous cherchez, ce qui est dans le paquet flash utils:

import flash.utils.getQualifiedClassName;
35
répondu Robert Bak 2012-05-07 06:33:05

Essayer quelque chose de fondé, autour de l'une de ces:

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

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

si l'objet est un Object () la chaîne du constructeur sera quelque chose comme

function Object() { ... }

donc vous pouvez vérifier pour cela.

5
répondu Chris Fulstow 2009-12-11 01:11:01

vous pouvez aussi utiliser getQualifiedSuperclassName qui renvoie null pour les Object type car il n'a pas une super-classe de:

public static function isObject( obj:* ):Boolean
{
    if ( obj == null )
        return false;
    return ( getQualifiedSuperclassName( obj ) == null );
}
3
répondu divillysausages 2013-09-17 20:30:05

voilà, essayez ça..

var ob:Object = new Object();

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

if(typeof(ob) == "object"){
    //true
}else{
    //false
}
-1
répondu sputn1k 2014-10-16 08:56:57