有人会解释为什么反向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>
答案 0 :(得分:3)
首次迭代时,i
为arr.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循环?
var arr = [1, 2, 3, 4, 5, 6, 7, 8],
i = arr.length;
while (i--) {
console.log(arr[i]);
}
&#13;
答案 2 :(得分:0)
这是因为arr.length
中数组的长度返回8,并且由于JavaScript中的数组是零索引(从0开始计数),因此数组中的最后一个元素位于索引{{1 }}
所以为了避免未定义,请执行以下操作:
arr.length - 1