0
var arr = ["a", "b", "c",null,undefined];

delete arr[0];

for (var i = 0,j=arr.length; i < j; i++) {
    console.log(arr[i]);
    /*
    undefined
    b
    c
    null
    undefined
    */
}

for (var o in arr) {
    console.log(arr[o]);
    /*
    b
    c
    null
    undefined
    */
}

出力が異なる理由を誰が教えてくれますか?

4

3 に答える 3

1

キーでアクセスできます。

配列インデックスは配列オブジェクトのキーです

deleteキーワードを使用して、オブジェクトキーを削除します。

delete arr[0]; // key "0" deleted!

わかった?

そしてこれを見てください

var arr = ["a", "b", "c",null,undefined];
delete arr[0]; // key "0" deleted!

// access by i,  with key : 0
for (var i = 0,j=arr.length; i < j; i++) {
    console.log(i);
    /*
    0 
    1 
    2 
    3 
    4 
    */
}

// access by object key, without key : 0
for (var o in arr) {
    console.log(o);
    /*
    1
    2
    3
    4 
    */
}​​​​​​​​​​

幸運を!

于 2012-07-26T04:05:12.147 に答える
1

実際deleteには、配列から要素を削除せず、要素を未定義として設定するだけです。配列から項目を削除するには、次のように使用spliceします。

var arr = ["a", "b", "c",null,undefined];
arr.splice(0, 1);

これで、配列は次のようになります

["b", "c", null, undefined]

しかし、あなたdeleteは次のように配列から最初のアイテムを削除するために使用しました

delete arr[0];

その後、アレイは次のようになりました

[undefined × 1, "b", "c", null, undefined]

したがって、最初のループで使用しました

for (var i = 0,j=arr.length; i < j; i++) {
    console.log(arr[i]);
}

配列のインデックスを使用して配列を繰り返したため、(初めてループ内で)どちらが使用され、2番目のループで使用されたかをarr[i]意味しますarr[0]undefined

for (var o in arr) {
    console.log(arr[o]);
}

これは実際にはループするオブジェクトで使用するのに理想的ですが、配列を使用しました。配列の他のプロパティも表示する必要があると思い(b c null undefined)ます。使用しない限り、これらの値のみを取得する方法は非常に混乱しています。hasOwnProperty

for (var o in arr) {
    if(arr.hasOwnProperty(o)) console.log(arr[o]);
}

いずれにせよ、オブジェクトの使用可能なすべてのプロパティを反復するため、配列と一緒に使用しないでください。このフィドルをチェックして、 usingをhasOwnProperty繰り返すときに、このメソッドを使用せずにどのように機能し、何を取得する必要があるかを理解してください。arrayfor in

于 2012-07-26T04:36:36.320 に答える
0

空の配列を指定すると、位置0にアイテムが格納されていないためarray = []array[0]が返されます。削除後、そこにデータはありません。配列内のすべての要素を反復処理してループするため、を返します。より具体的には、オブジェクトのプロパティをループします。したがって、たとえば、に新しいプロパティを割り当てると、ループで出力されます。undefinedarr[0]for .. in ..b c null undefinedfor .. in ..namearrarr.name = "an array"for .. in ..

于 2012-07-26T04:06:40.703 に答える