实际上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]);
}
它使用数组的索引迭代数组,所以(第一次在循环中)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]);
}
无论如何,它会迭代对象的所有可用属性,并且不应该与数组一起使用。检查this fiddle以了解在迭代usinghasOwnProperty
时不使用此方法的工作原理以及您应该得到什么。array
for in