-1

コードが次の場合:

arr=Array("a","b","c");
for(i in arr);
{
 alert(i);
}

アラートはありませんが、次の場合:

arr=new Array("a","b","c");
for(i in arr)
{
 alert(i);//alerts 0,1,2
}

理由は何ですか?

4

2 に答える 2

3

Arrayコンストラクタです。新しいオブジェクトを作成するには、 new 演算子を使用してオブジェクトを作成する必要があります。その後、コンストラクターがバインドされて実行されます。ただし、この場合、実際にはどちらの方法でも機能するはずです。コメントに記載されているように、問題は for ループの横のセミコロンに関連している可能性が最も高いです。

余談ですが、新しい配列を作成するには、一般に、より単純な表記法を使用することをお勧めします

var arr = ["a","b","c"];

配列で定義された追加のプロパティにヒットするため、javascript の配列で for-in ループを使用することも疑問です。(だから、あなたが言っarr.x = 2たなら、x.

反復形式を使用する方が良い

var i =0, length =arr.length;
for ( ;i<length; i++) {

    alert(arr[i]);
}
于 2013-04-01T01:58:16.523 に答える
1

異なる結果が得られる理由は、for/in ループに不適切な構文を使用していたためです。

for(i in arr);
{
 alert(i);
}

最初のセミコロンがあってはなりません。

また、配列を反復処理するより良い方法は次のようになることにも注意してください。

arr.forEach(function(value, index){
    alert(value); // or alert(index);
});

bfavaretto が述べたように。

キーワードなしで Array 関数を呼び出すと、newキーワードを使用した場合と同じ方法で、新しい Array オブジェクトが作成されて返されますnew

したがって、これら 2 つは同じことを警告します。

arr1 = new Array("a","b","c");
arr2 = Array("a","b","c");
于 2013-04-01T02:33:19.250 に答える