2012-06-01 42 views
0

我认为它应该提醒4次,但它为什么只提醒2次。有没有人可以为我做出解释?使用js数组作为堆栈

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()); 
    } 

回答

6

更改您的for循环到while循环:

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

的问题是,你从数组删除元素,所以length减少,提前结束你的for循环。经过for循环的2次迭代后,arr.length为2,并且i也为2,因此循环结束。

这里是上述的working example

+0

非常好!我真的是编程的新手 –

+0

或另一种可能性正在做'for(var i = 0,l = arr.length; i fcalderan

+0

非常感谢。 –

1

您的代码检查长度的每一个回路所以在第二循环数组的长度必须是2(2弹出),但无功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()); 
} 
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()); 
    } 
0

由于弹出()操作阵列长度递减循环执行期间。所以在2次迭代后,i == 2和arr.length == 2