在 Actionscript 3 中测试字符串是否是对象的属性的最佳方法是什么

发布于 2024-11-18 07:06:44 字数 1133 浏览 1 评论 0原文

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

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

I usually test to see if a string is a key in an object by asking:

var foo:Object = {bar:"bar", bah:["bah","bah1"]};
var str:String = "boo";
if(foo[str]) // do something

But if str == "constructor" it will do something - because foo["constructor"] returns true no matter what.

What is the best way to test if a string is the key of an object - and does not return true for constructor?

Some examples:

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));

Traces:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何必那么矫情 2024-11-25 07:06:44

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

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

这显然也应该在匿名对象上正常工作(感谢您让我知道!)。

If it's a concrete class implementation, you should be able to get away with hasOwnProperty for the most part:

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

Which apparently should also work fine on an anonymous object (thanks for letting me know!).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文