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