0

関数は次のとおりです。

var M = [];
function haveComponents () {
        var a = 0;
        for (var n in this.M) a++;
        return a > 0;
    }

私は理解したい:

  • "for(var n in this.M)"の構成; 私は通常のforループに慣れていて、この構造に精通していません。
  • 「this.M」がコードにどのように適合するか、つまりその目的
  • 一般的に言えば、この関数は何のために使用される可能性がありますか。

ありがとう

4

4 に答える 4

1
  • for(var n in this.M)これはfor-eachループであり、条件を使用する代わりに、値のセットを反復処理するために使用されます。これは、オブジェクトのプロパティを反復処理するために使用されます。
  • thisキーワードは関数の所有者(haveComponents関数)を参照し、はのMプロパティですthis
  • この関数は、無駄に、要素をMカウントして0より大きいかどうかを確認します。ただし、この目的では、要素をカウントすることは絶対に不要です。
于 2013-03-16T01:11:48.330 に答える
1

欠落しているコードがあるようです。

var M = [];

グローバル変数のように見える変数に新しい配列を割り当てMます(ただし、そうではない可能性があります。コンテキストを適切に判別するための十分なコードが表示されていないだけです)。

haveComponents: function () {

これは、。というプロパティに関数を割り当てるオブジェクトリテラルの一部のようhaveComponentsです。

        var a = 0;

ローカル変数aを作成し、コードの実行時に値を割り当てます0

        for (var n in this.M) a++;

ローカル変数nを作成し、参照するものの列挙可能なプロパティの名前を順番に割り当てthis.Mます。thisがグローバルオブジェクトの場合、上記Mで初期化された配列になります。そうでない場合、それは何か他のものであるかもしれないし、そうでないかもしれません。他の割り当て、または設定されているものは表示されていませんthis

の列挙可能なプロパティM(継承されたプロパティを含む)ごとaに、1ずつインクリメントされます。

        return a > 0;
    }

がゼロより大きいtrue場合に戻ります。a

同等の関数は次のとおりです。

haveComponents: function () {

    for (var n in this.M) {

      // this.M has at least one enumerable property
      return true;
    }

    // this.M has no enumerable properties
    return false;
}

または純粋主義者のために:

haveComponents: function () {
    var hasEnumerable = false;
    for (var n in this.M) {
        hasEnumerable = true;
        break;
    }
    return hasEnumerable;
}
于 2013-03-16T01:25:16.957 に答える
1

この関数は、M配列に含まれる要素の数をカウントします。

  • を使用for inすると、オブジェクトの列挙可能なプロパティを反復できます。これは、プロパティではなくアイテムに対して反復が行われる動作とは異なることに注意してください。for eachjavascriptでは、これはプロトタイプのプロパティ名に変換され、それらもリストされるため、予期しない結果が生じる可能性があります。
于 2013-03-16T01:25:52.743 に答える
0

for(var n in this.M)すべての要素を反復処理し、this.Mそれらを変数に連続して格納しますn

this.M私はあなたのコードがどこから来たのかによりますが、それが何であるかわかりません。

M一般に、このコードは空かどうかを返します(空trueでない場合は戻ります)。

于 2013-03-16T01:10:36.210 に答える