web-dev-qa-db-ja.com

AS3:変数がオブジェクトタイプであるかどうかの確認

Actionscript3でこのようなことをしたいです。

_if(variable is Object) ...;
else ...;
_

ここで、variableString()Number()Array()Object() ..

現在、上記のチェックはこれらすべてのタイプに対してtrueを返しますが、これは理にかなっています。ただし、new Object()で作成されたオブジェクトに対してのみtrueを返すようにします。

どんな助けでも大歓迎です!

19
Tapio Saarinen

この関数(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があなたが探しているものであると思います。これはflashutilsパッケージに含まれています。

import flash.utils.getQualifiedClassName;
35
Robert Bak

これらのいずれかに基づいて何かを試してください:

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

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

オブジェクトがObject()の場合、コンストラクタ文字列は次のようになります。

function Object() { ... }

だからあなたはそれをチェックすることができます。

5
Chris Fulstow

スーパークラスがないため、getQualifiedSuperclassNameタイプにnullを返すObjectを使用することもできます。

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