Javascript 删除数组时的注意事项

var list = new Array();
for(var i = 0;i<5;i++){
 	list.push(i);
}
//delete list[2]; // [0,1,undefined,3,4],5
list.splice(3,1); // [0,1,2,4],4
console.log(list,list.length);

在Javascript当中使用delete删除数组的时候会出现异常,并不会如PHP一样将数组重新排序,而是在数组当中留下了一个空洞。当你console这个变量的时候,会发现输出爲undefined

var list = new Array();
for(var i = 0;i<5;i++){
 	list.push(i);
}
delete list[2]; // [0,1,undefined,3,4],5
for(i in list){console.log(i)}
console.log(list,list.length);

因此使用delete直接删除数组元素对后续的程序运行可能会产生一定影响。

这里最好的方式是使用Array.splice这个函数来操作数组的删除,但是针对大数组可能会有性能上的问题。

另外关于length,也有需要注意的地方: 按照《Javascript 语言精粹》当中所说,length的属性的值是这个数组最大整数属性名+1,其不一定等于数组元素的个数。

var list = new Array();
list[10000] = true;
console.log(list.length); // 10001

所以在使用length属性做判断和操作的时候一定要小心。

Q.E.D.