反转循环 - 第一次迭代未定义

时间:2016-12-21 16:04:37

标签: javascript

有人会解释为什么反向for循环的第一次迭代会返回undefined吗?

$(function(){
  
  var arr = [1,2,3,4,5,6,7,8]
  
  for (var i = arr.length; i > -1; i--) {
    console.log(arr[i]);
  }
  
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

3 个答案:

答案 0 :(得分:3)

首次迭代时,iarr.length

索引arr.length没有元素。从零开始的数组的最后一个元素是索引arr.length-1

反向迭代的常用方法是

for (let i=arr.length; i-- > 0; ) {

(注意条件递减计数器并在循环内容之前执行)

这也可以在JavaScript中简化为

for (let i=arr.length; i--;) {

答案 1 :(得分:2)

为什么不使用带有postfix decrement --而不是合理for循环的while循环?

&#13;
&#13;
var arr = [1, 2, 3, 4, 5, 6, 7, 8],
    i = arr.length;
  
while (i--) {
    console.log(arr[i]);
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这是因为arr.length中数组的长度返回8,并且由于JavaScript中的数组是零索引(从0开始计数),因此数组中的最后一个元素位于索引{{1 }}

所以为了避免未定义,请执行以下操作:

arr.length - 1