本当に受け入れられた答えを信頼すると、実際に私は少しのトラブルに陥りました。プロトタイプに関連した違いだけではないようです。私が見つけたのは
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
そして、まだそれによりがあります。 hasOwnPropertyは静的ルックアップをサポートしていません。たとえば、**静的プロパティ** - オブジェクトの定義クラスまたはそのスーパークラスのstaticキーワードで定義された変数、定数、またはメソッド。 '** Prototype properties **' - オブジェクトのプロトタイプチェーンの一部であるプロトタイプオブジェクトに定義されたプロパティ。 'false'を返します。 –
静的またはプロトタイプのプロパティまたはメソッドが存在するかどうかをチェックしないため、 'hasOwnProperty'としてプロパティまたはメソッドにアクセスするとエラーがスローされるかどうかを' in'で調べる方法があります。 –