2009-12-11 20 views
18

chcę zrobić coś takiego w ActionScript 3:AS3: Sprawdzanie czy zmienna jest typu Object

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

Gdzie variable mógłby być String(), Number(), Array(), Object() ...

Obecnie powyższe sprawdzanie zwraca wartość true dla wszystkich tych typów, co ma sens. Chcę tylko, aby zwracał wartość true dla obiektów wykonanych przy użyciu new Object().

Każda pomoc będzie bardzo ceniona!

Odpowiedz

34

Powinieneś spróbować użyć tej funkcji - getQualifiedClassName i typeof. Oto kod pokazujący, w jaki sposób zachowują się dla różnych typów danych, które zostały wymienione, widać różnicę na tablicy i Numerów szczególności:

Kod:

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

Wynik:

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 

Zakładam, że getQualifiedClassName będzie tym, czego szukasz, który znajduje się w pakiecie flash utils:

import flash.utils.getQualifiedClassName; 
+0

Tak, ja rzeczywiście dowiedziałem się o getQualifiedClassName wkrótce po tym, i to jest rzeczywiście to, czego szukałem. Dziękuję za odpowiedź! –

5

spróbować czegoś skupione wokół jednego z nich:

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

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

Jeśli obiekt jest Object() ciąg konstruktor będzie coś

function Object() { ... } 

więc można sprawdzić za to.

3

Można również użyć getQualifiedSuperclassName która zwraca null dla typu Object gdyż nie mają super klasę:

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

Proszę, spróbuj to ..

var ob:Object = new Object(); 

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

if(typeof(ob) == "object"){ 
    //true 
}else{ 
    //false 
} 
Powiązane problemy