В Actionscript 3, как лучше всего проверить, является ли строка свойством объекта - PullRequest
1 голос
/ 02 июля 2011

Обычно я проверяю, является ли строка ключом в объекте, спрашивая:

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
*/

1 Ответ

2 голосов
/ 02 июля 2011

Если это конкретная реализация класса, вы должны иметь возможность по большей части использовать hasOwnProperty:

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

, которая, очевидно, также должна хорошо работать на анонимном объекте (спасибо, что позволили мнезнаю!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...