0

我认为它应该发出 4 次警报,但为什么它只发出 2 次警报。有没有人可以为我解释一下?

   var arr = new Array;

   arr.push("1");
   arr.push("2");
   arr.push("3");
   arr.push("4");

   for(var i=0;i<arr.length;i++){
     alert(arr.pop());
   }
4

4 回答 4

6

将循环更改forwhile循环:

while(arr.length) {
    alert(arr.pop());   
}

问题是您从数组中删除元素,因此length减少,for提前结束循环。在循环的 2 次迭代之后forarr.length是 2,i也是 2,所以循环结束。

这是上面的一个工作示例

于 2012-06-01T11:04:45.450 回答
1

您的代码正在检查每个循环的长度,因此在第二个循环中,数组长度必须为 2(弹出 2)但 var i 为 2,因此它们将退出循环

尝试使用for或者你可以使用

var arr = new Array;

arr.push("1");
arr.push("2");
arr.push("3");
arr.push("4");
var length = arr.length;
for(var i=0;i<length;i++){
    alert(arr.pop());
}
于 2012-06-01T11:08:02.697 回答
0

Pop 从数组中删除元素,并减小长度属性。所以经过两个循环 i = 2 和数组长度 = 2。

   var arr = new Array;
   arr.push("1");
   arr.push("2");
   arr.push("3");
   arr.push("4");
   var len = arr.length;
   for(var i=0;i<len;i++){
       alert(arr.pop());
   }
于 2012-06-01T11:09:29.797 回答
0

由于 pop() 操作数组长度在循环执行期间递减。所以经过 2 次迭代, i==2 和 arr.length==2

于 2012-06-01T11:09:41.220 回答