実際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
繰り返すときに、このメソッドを使用せずにどのように機能し、何を取得する必要があるかを理解してください。array
for in