2

そのため、リスト (ハッシュ) 内のキーをチェックしています。2 つの異なる方法でコード化する必要がありますが、その一部を削除するのを忘れています。笑。しかし、私には、それを見ると、冗長に見えます。これは事実ですか?

 var somelist = {
      a : 'somevalue1',
      b : 'somevalue1',
      c : 'somevalue1',
      d : 'somevalue1',
      e : 'somevalue1',
      f : 'somevalue1'
 }

 for(var key in somelist ){
     if(somelist.hasOwnProperty(key)){  // <-- redundant
         // do something
     }
 }

キーを介してループしている場合-仮定は、それはリストのプロパティです、はい? 脳が焼かれないようにしたい。:-)

私はこれらの2つの投稿を見ました:

for..in および hasOwnProperty

JavaScript でオブジェクトにプロパティがあるかどうかを確認するにはどうすればよいですか?

しかし、私の使用法ははるかに良性のようです。ここで var key を宣言しているので、ローカルであり、プロトタイプのチェーンの衝突を心配する必要はありませんか?

したがって、私の使用法では、それは冗長であるか不要であるように見えますが、これは「貧弱な形式」と見なされます。このハッシュがコンストラクターに座っていないため、プロトタイプの継承などについて心配する必要はないようです...

だから、私の2つの質問は次のとおりです。

ここで var key を宣言しているので、ローカルであり、プロトタイプのチェーンの衝突を心配する必要はありませんか?

ここでの私の使用法は、必要がなくても「悪い形」と見なされますか? 特定のコーディング標準を守りたかったのですが、おそらく私の意図はここで間違っています。

4

2 に答える 2

3

keyどこを気にしなければならないかということではありません。それはオブジェクトそのものです。

Object.prototype[1] = 1;

var somelist = {}

for (var key in somelist) {
    alert(key);
}

// '1' was alerted
于 2013-11-09T00:57:51.843 に答える
1

そのチェックを行うことで、コードをより堅牢にするだけであり、ベスト プラクティスとして推奨されます。ただし、意図を浅く保つために、通常は逆のパターンを実行します。

for( var key in obj ) {
    if( !obj.hasOwnProperty( key ) ) {
        continue;
    }

    // do something
}

Jo So は潜在的な競合を指摘しましたが、データが変更されるだけでコードが壊れる可能性もあります。ソフトウェア開発の黄金律: 失敗を予期する。

于 2013-11-09T01:01:52.843 に答える