“ in”运算符和“ hasOwnProperty”方法似乎可以互换,但是我想知道一个是在检查继承的属性还是其他,而另一个则不是。我对将其与Dictionary一起使用的情况特别感兴趣,但是我怀疑这与其他用法是否不同。

官方文档here中描述了“ hasOwnProperty”,而here中描述了“ in”,但是如果有区别,我就不太清楚了。

最佳答案

相信这个广为接受的答案实际上使我陷入了麻烦。发生的事情似乎不只是与原型相关的差异。我发现的是

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

这是一个示例进行演示。

码:

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

关于actionscript-3 - 在Actionscript 3中,“in”运算符与“hasOwnProperty”方法有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6878882/

10-10 23:23