我想知道javaScript的pop()函数是否有什么特别之处我应该知道。
我的目的是编写一个程序来擦除数组中的所有值,而不实际删除数组。我的第一次尝试就是这个,但并没有完全成功:
var index = [1,2,3,4,5,6,7,8,9,10];
for(var i=0;i<index.length;i++) { index.pop(); console.log(index+';'); }
// outputs this:
[1,2,3,4,5,6,7,8,9];
[1,2,3,4,5,6,7,8];
[1,2,3,4,5,6,7];
[1,2,3,4,5,6];
[1,2,3,4,5];
然后它就停在那里。咦?检查后,我发现该数组确实是[1,2,3,4,5]
,而不是某些console.log显示错误。哪个没有意义。
在预感中,我决定减少for循环,并像这样使用它:
var index = [1,2,3,4,5,6,7,8,9,10];
for(var i=index.length; i--; i>0) { index.pop(); console.log(index+';'); }
// and for some reason, this works:
[1,2,3,4,5,6,7,8,9];
[1,2,3,4,5,6,7,8];
[1,2,3,4,5,6,7];
[1,2,3,4,5,6];
[1,2,3,4,5];
[1,2,3,4];
[1,2,3];
[1,2];
[1];
[];
那么,为什么第二个例子有效而不是第一个?对我来说似乎很奇怪。 (我有时会嘲笑javaScript有多荒谬)!!!
谢谢!
编辑:我不知道for循环每次都查找index.length,而不仅仅是第一次调用它。
答案 0 :(得分:2)
问题是你的第一个for循环正在查看index.length。它不断变化,因为阵列越来越小!所以在五个循环之后,你的数组是:
[1,2,3,4,5];
和i
是5,因为这是第五个循环。因此条件i<index.length
出现在5<5
,这是错误的。请注意,index.length
仅为“5”!我们缩短了阵列!所以,你离开了循环。如果你想让它工作,你需要将原始长度存储在变量中,这样每次迭代都不会改变:
var original_length = index.length;
for(var i=0;i<original_length;i++) { index.pop(); console.log(index+';'); }
答案 1 :(得分:0)
当你从数组中弹出一个项目时,数组的长度会减少,所以当你从数组index.length
中删除了五个元素时,它是5,而我是5,因此循环条件失败。
对于第二个循环,您只需在开始时检查数组的长度,然后再从中删除元素。
答案 2 :(得分:0)
只需添加评论并回答一个例子。
var l = index.length
for(var i=0;i<l;i++) { index.pop(); console.log(index+';'); }