Object 在ActionScript3中,测试字符串是否为对象属性的最佳方法是什么

Object 在ActionScript3中,测试字符串是否为对象属性的最佳方法是什么,object,actionscript,constructor,Object,Actionscript,Constructor,我通常通过询问以下问题来测试字符串是否是对象中的键: var foo:Object = {bar:"bar", bah:["bah","bah1"]}; var str:String = "boo"; if(foo[str]) // do something 但是如果str==“constructor”,它会做一些事情——因为foo[“constructor”]无论如何都返回true 测试字符串是否是对象的键并且构造函数不返回true的最佳方法是什么 一些例子: var foo:Object

我通常通过询问以下问题来测试字符串是否是对象中的键:

var foo:Object = {bar:"bar", bah:["bah","bah1"]};
var str:String = "boo";
if(foo[str]) // do something
但是如果str==“constructor”,它会做一些事情——因为foo[“constructor”]无论如何都返回true

测试字符串是否是对象的键并且构造函数不返回true的最佳方法是什么

一些例子:

var foo:Object = {bar:"bar", bah:["bah","bah1"]};
trace('foo["bar"]: ' + foo["bar"]);
trace('foo["bah"]: ' + foo["bah"]);
trace('foo["constructor"]: ' + foo["constructor"]);
trace('foo["bar"] == true: ' + (foo["bar"] == true));
trace('foo["bah"] == true: ' + (foo["bah"] == true));
trace('foo["constructor"] == true: ' + (foo["constructor"] == true));
if(foo["bar"]){
    trace("foo:bar");
}
if(foo["bah"]){
    trace("foo:bah");
}
if(foo["constructor"]){
    trace("foo:constructor");
}
trace('"constructor" in foo: ' +  ("constructor" in foo));
跟踪:

/*
foo["bar"]: bar
foo["bah"]: bah,bah1
foo["constructor"]: [class Object]
foo["bar"] == true: false
foo["bah"] == true: false
foo["constructor"] == true: false
foo:bar
foo:bah
foo:constructor
"constructor" in foo: true
*/

如果它是一个具体的类实现,那么在大多数情况下,您应该能够避开
hasOwnProperty

var hasProperty : Boolean = foo.hasOwnProperty("bar");

显然,它在匿名对象上也可以正常工作(谢谢你让我知道!)。

hasProperty工作了:
foo.hasOwnProperty(“bar”):true
foo.hasOwnProperty(“构造函数”):false
谢谢你让我知道,我已经更新了答案,删除了不必要的内容。