考虑下面的代码:
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"
它或它可能关心的任何人,以便他们提出一个很好的解决方案。