AS3:检查变量是否为“Object”类型

19

我想在Actionscript 3中做类似于这样的事情:

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

变量variable可以是String()Number()Array()Object()等。

目前上述检查对所有这些类型都返回true,这是合理的。但我只想让它对使用new Object()创建的对象返回true。

非常感谢任何帮助!

4个回答

35

你应该尝试使用这些函数 - getQualifiedClassNametypeof。以下是一个代码示例,展示它们对你列出的不同数据类型的行为,特别是对于数组和数字的区别:

代码:

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;

是的,我很快就发现了getQualifiedClassName,它确实是我正在寻找的东西。感谢您的回复! - Tapio Saarinen

5

尝试基于以下内容之一:

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

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

如果对象是Object(),构造函数字符串将类似于:
function Object() { ... }

所以你可以检查它。


3

您还可以使用getQualifiedSuperclassName,对于Object类型,它会返回null,因为它没有超类:

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

-1

给你,试试这个...

var ob:Object = new Object();

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接