JavaScript での for in ループと hasOwnProperty の使用_javascript のヒント

WBOY
リリース: 2016-05-16 17:32:46
オリジナル
1506 人が閲覧しました

in 演算子と比較して、for in はオブジェクトのプロパティをループするときにプロトタイプ チェーンも走査し、配列の長さプロパティなどの列挙不可能なプロパティを読み取りません。 概要: オブジェクトに特定のプロパティがあるかどうかを検出する場合、このタスクを完了できる唯一のメソッドは hasOwnProperty です。判断のために hasOwnProperty を追加することをお勧めします。これにより、ローカル プロトタイプの拡張によって発生するエラーを効果的に回避できます。

in 演算子と比較すると、for in はオブジェクトのプロパティをループするときにプロトタイプ チェーンもトラバースし、配列の長さプロパティなどの列挙不可能なプロパティを読み取りません。

コードをコピー コードは次のとおりです:

// Extend Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) { // bar と moo を出力します。
}


ループ本体内の特定のプロパティをフィルターする必要がある場合は、Object.prototype の hasOwnProperty メソッドを使用できます。それを完成させてください。

ヒント: for in ループは常にプロトタイプ チェーン全体を走査するため、複数の継承されたオブジェクトを走査する場合は効率が低くなります。

hasOwnProperty を使用してフィルタリングします


コードをコピーします コードは次のとおりです:
// 上記の例でも foo オブジェクトをターゲットにしています
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i); 🎜>}
}


この例では、hasOwnProperty が使用されているため、最終的に moo が出力されます。hasOwnProperty が無視された場合、コードは、ローカル プロトタイプ ( Object.prototype として) が拡張されました。

Prototype フレームワークは、JavaScript の独自オブジェクトを拡張したクラス ライブラリであり、広く使用されていますが、このフレームワークを導入すると、フィルタリングと判定に hasOwnProperty を使用しないと、出力結果が次のようになります。あなたが望むものではないことは保証されています。

ベスト プラクティス

実行時の判断には常に hasOwnProperty を使用することをお勧めします。実行中のコード環境が汚染されているかどうかは誰も保証できません。

hasOwnProperty
オブジェクトにプロトタイプ チェーンにないカスタム プロパティがあるかどうかを確認するには、どのオブジェクトにもこのメソッドがあり、Object.prototype から継承されます。 。

ヒント: プロパティは存在する可能性がありますが、その値は未定義であるため、プロパティが未定義であるかどうかを完全に検出することはできません。 hasOwnProperty は、プロトタイプ チェーンを通過せずにオブジェクト プロパティを処理できる Javascript の唯一のメソッドです。



// Extend Object.prototype
Object.prototype.bar = 1;
var foo = {goo: unknown};

foo.bar; // 1
'bar' in foo; >
foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true



hasOwnProperty のみが正しい結果を返します, これは、オブジェクトのプロパティを反復処理するときに必要です。オブジェクトのプロトタイプ チェーンで定義されたプロパティを除外する他の方法はありません。

プロパティとしての hasOwnProperty

JavaScript は hasOwnProperty をキーワードまたは予約語として保護しないため、オブジェクトに同じ名前のプロパティがある場合は、拡張された hasOwnProperty を使用して取得する必要があります。正しい結果。




コードをコピー コードは次のとおりです。 var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be Dragons'
} // 常に false を返します。
// 別の hasOwnProperty を使用して呼び出し、これを foo に設定します
{}.hasOwnProperty.call(foo, 'bar') // true



概要 オブジェクトが特定のプロパティを持っているかどうかを検出する場合、このタスクを完了できる唯一のメソッドは hasOwnProperty です。これにより、ローカル プロトタイプの拡張によって発生するエラーを効果的に回避できるため、判定のために hasOwnProperty を追加することをお勧めします。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート