验证AS3 SharedObject数据的属性是否存在

3
如何验证SharedObject的某些属性是否存在?换句话说,我想确保我从本地SharedObject中读取到的内容是合理的(第一次加载swf时应该没有什么好东西)。
我从以下网址获取信息:http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/SharedObject.html 假设我定义了
var my_so:SharedObject = SharedObject.getLocal("superfoo");

如果我已经得到了my_so.data.foobar下的某些内容,我希望在我的应用程序中使用它。(在此之前,myapp.myfoo已经有了默认值)

if (my_so.data.foobar != null) myapp.myfoo=my_so.data.foobar;

这似乎与Flash 10.1有关。我错过了什么吗?

编辑:感谢您的帮助,问题已解决。 :)

然而,看到用SharedObject进行这种检查的惯用方法会很好。我找到了许多教如何使用SharedObject的示例,但它们似乎掩盖了一个事实,即您需要检查是否在其中保存了任何有价值的内容。这正是首次加载.swf时发生的情况。另一个问题是检查是否成功实例化了SharedObject(例如,当其被禁用时),但那将是完全不同的问题...


没有 my_so.data.foobar != null 的检查,它能正常工作吗? - www0z0k
也许条件代码在实例化之前执行?你是否遇到了运行时错误?如果是,将它们包含在问题中将有助于诊断问题。 - JeremyFromEarth
现在它可以工作了。 :) 如果我理解正确的话,我是在将未定义的值传递给myapp.myfoo,从而覆盖了我之前定义的“合理”的默认值。 - Sint
SO的数据属性只是一个对象(请查看AS3文档),因此测试其是否存在只需使用测试对象属性的常规方法即可。 - mpdonadio
2个回答

6
我猜测你可能遇到了null与undefined的问题。
我建议尝试使用hasOwnProperty方法:
```html hasOwnProperty ```
if (my_so.data.hasOwnProperty("foobar")) myapp.myfoo=my_so.data.foobar;

有几种方法可以确定一个对象是否具有特定的属性,但hasOwnProperty()可能是最好的方法。


这个工作得非常好!我怀疑问题正如你所说,属性未定义而不是空(我的 AS3 生疏显而易见)。除非有更好的习语,否则我将接受这个答案。 - Sint

3

I prefer:

if ("foo" in someObject)
{
    // Do stuff
}

1
据我所知,这种方法与hasOwnProperty的主要区别在于IN检查原型属性,而hasOwnProperty则不会。在我的情况下,这并不重要,两种方法都可以使用。 - Sint
是的,这就是行动上的区别,而且我认为“in”稍微快一些,因为它内置在AVM中。但主要是因为我更喜欢它的阅读方式 :) - Sophistifunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接