Javascriptでハッシュ内のすべての値を見つけるために、次のコードを見ました。
var myHash = {};
myHash['one'] = 1;
myHash['two'] = 2;
for (var key in myHash) {
if (myHash.hasOwnProperty(key)) {
//do something
}
}
ここでhasOwnPropertyをチェックすることのポイントは何ですか?
Javascriptでハッシュ内のすべての値を見つけるために、次のコードを見ました。
var myHash = {};
myHash['one'] = 1;
myHash['two'] = 2;
for (var key in myHash) {
if (myHash.hasOwnProperty(key)) {
//do something
}
}
ここでhasOwnPropertyをチェックすることのポイントは何ですか?
重要なのは、それがプロトタイプチェーンを介して継承されたものではなく、key
直接定義されたプロパティであることを確認することです。myHash
を使用in
しても、継承されたプロパティは自動的に除外されないため、自分で行うことができます。
しかし、他の人が言っているように、それはあなたの特定の例には必要ありません。
出典: hasOwnProperty
MDN上。
myHashが列挙可能なプロパティを持つオブジェクトの新しいインスタンスである場合は、メソッドやその他の継承されたプロパティが一覧表示されないようにするのがより重要かもしれません。
その特定のケースでは違いはありませんが、myHashに「継承された」プロパティがある場合、hasOwnPropertyチェックなしでそれらもループされます。
これはおそらく予防策であり、コーダーがすべての行が必要かどうかをチェックすることを心配せず、それが機能しただけのコピーペーストですらあります。