【发布时间】:2012-09-20 02:58:00
【问题描述】:
考虑下面的代码:
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}
上述函数应该从数组"arrayElements" 中删除所有元素。但它不会。
Javascript 引擎按原样维护"index",并且不介意修改数组。
人们可能会期望像"for each" 这样的循环不会出现此类问题
即使下面的代码似乎也不起作用:
function splicer()
{
...
for(var index in arrayElements)
{
arrayElements.splice(index--,1);
}
...
}
即使更改变量“index”的值似乎也不起作用。 更改后的值在“for(...){...}”块中可用,但是,当循环到达下一次迭代时,该值将被重置并从下一个索引继续作为发条。
所以看起来像这样的代码可能是唯一的解决方案:
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index=0;index<arrayElements.length;index++)
{
arrayElements.splice(index--,1);
}
alert("Elements: "+arrayElements);
}
测试于:Firefox 16 Beta。
但在 "splice()" 方法中放置一元运算符乍一看似乎会产生误导。
这可能值得 "W3C" 或任何可能关心的人考虑,以便他们提出一个不错的解决方案。
【问题讨论】:
标签: javascript arrays for-loop foreach