Обычно я проверяю, является ли строка ключом в объекте, спрашивая:
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
*/