Actionscript 3 在ActionScript3中,与;在;运营商和;“拥有自己的财产”;方法?

Actionscript 3 在ActionScript3中,与;在;运营商和;“拥有自己的财产”;方法?,actionscript-3,actionscript,Actionscript 3,Actionscript,“in”操作符和“hasOwnProperty”方法看起来是可以互换的,但我想知道一个是否在检查继承属性或其他东西,另一个是否在检查继承属性或其他类似的东西。我特别感兴趣的是将它与词典一起使用,但我怀疑这与其他用法不同 官方文档中描述了“hasOwnProperty”和“in”,但如果有区别,我觉得不太清楚。我知道的变化是in查找原型链,而hasOwnProperty没有,大多数AS3开发人员不使用原型,因此,这与日常使用并不完全相关。相信这个被精确接受的答案实际上给我带来了一点麻烦。似乎不仅仅

“in”操作符和“hasOwnProperty”方法看起来是可以互换的,但我想知道一个是否在检查继承属性或其他东西,另一个是否在检查继承属性或其他类似的东西。我特别感兴趣的是将它与词典一起使用,但我怀疑这与其他用法不同


官方文档中描述了“hasOwnProperty”和“in”,但如果有区别,我觉得不太清楚。

我知道的变化是
in
查找原型链,而
hasOwnProperty
没有,大多数AS3开发人员不使用原型,因此,这与日常使用并不完全相关。

相信这个被精确接受的答案实际上给我带来了一点麻烦。似乎不仅仅是原型相关的差异,还有更多的差异。我发现的是

当某个键是引用类型时,不能使用hasOwnProperty查看该键是否存在于字典中,但in运算符可以。

下面是一个要演示的示例

代码:

var测试:函数=函数(键:*,标签:字符串):无效
{
变量d:字典=新字典(true);
d[键]=真;
痕迹(标签);

跟踪(“hasOwnProperty:”+(d.hasOwnProperty(键)?“true”:"false,还有更多内容。hasOwnProperty不支持静态查找。例如,
**静态属性**
-在对象的定义类或其任何超类中使用static关键字定义的变量、常量或方法;以及
**原型属性**
-在已定义的原型对象上定义的属性对象原型链的一部分。`will返回
false
。查看它的另一种方法是
in
如果我访问as
hasOwnProperty
不存在的属性或方法,它会告诉我它是否抛出错误,因为它不检查静态或原型属性或方法是否存在。
var test:Function = function(key:*,label:String):void
    {
        var d:Dictionary = new Dictionary(true);
        d[key] = true;
        trace(label);
        trace("  hasOwnProperty: " + (d.hasOwnProperty(key)?"true":"false <== !!PROBLEM!!"));
        trace("  in: " + (key in d));
        trace("  []: " + d[key]);
    };
test({}, "indexed by object");
test("string", "key is string");
test(0, "key is number");
test(true, "key is boolean");
indexed by object
  hasOwnProperty: false <== !!PROBLEM!!
  in: true
  []: true
key is string
  hasOwnProperty: true
  in: true
  []: true
key is number
  hasOwnProperty: true
  in: true
  []: true
key is boolean
  hasOwnProperty: true
  in: true
  []: true