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

Javascript 循环反向-第一次迭代未定义,javascript,Javascript,有人能解释为什么循环日志的第一次反向迭代没有定义吗 var arr=[1,2,3,4,5,6,7,8] 对于var i=阵列长度;i>-1;我-{ console.logarr[i]; } 在第一次迭代中,i是arr.length 索引arr.length处没有元素。零基数组的最后一个元素位于索引arr.length-1处 通常的反向迭代方法是 for (let i=arr.length; i-- > 0; ) { 请注意,该条件使计数器递减,并在循环内容之前执行 这也可以用JavaS

有人能解释为什么循环日志的第一次反向迭代没有定义吗

var arr=[1,2,3,4,5,6,7,8] 对于var i=阵列长度;i>-1;我-{ console.logarr[i]; } 在第一次迭代中,i是arr.length

索引arr.length处没有元素。零基数组的最后一个元素位于索引arr.length-1处

通常的反向迭代方法是

for (let i=arr.length; i-- > 0; ) {
请注意,该条件使计数器递减,并在循环内容之前执行

这也可以用JavaScript简化为

for (let i=arr.length; i--;) {
在第一次迭代中,i是arr.length

索引arr.length处没有元素。零基数组的最后一个元素位于索引arr.length-1处

通常的反向迭代方法是

for (let i=arr.length; i-- > 0; ) {
请注意,该条件使计数器递减,并在循环内容之前执行

这也可以用JavaScript简化为

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

为什么不将while循环与a而不是justized for循环一起使用呢

var arr=[1,2,3,4,5,6,7,8], i=阵列长度; 而我——{ console.logarr[i];
} 为什么不将while循环与a而不是justized for循环一起使用呢

var arr=[1,2,3,4,5,6,7,8], i=阵列长度; 而我——{ console.logarr[i];
} 这是因为arr.length中的数组长度返回8,并且由于JavaScript中的数组是从0开始的零索引计数,数组中的最后一个元素位于索引arr.length-1

因此,要避免未定义,请执行以下操作:

$(function(){

  var arr = [1,2,3,4,5,6,7,8]

  for (var i = arr.length - 1; i > -1; i--) {
    console.log(arr[i]);
  }

})

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

因此,要避免未定义,请执行以下操作:

$(function(){

  var arr = [1,2,3,4,5,6,7,8]

  for (var i = arr.length - 1; i > -1; i--) {
    console.log(arr[i]);
  }

})

var i=arr.length-1;只是为了添加一些东西:arr.reverse.mape=>console.loge;使用lambda和反向原型,这是ecmascript第一版以来支持的。var i=arr.length-1;只是为了添加一些东西:arr.reverse.mape=>console.loge;使用lambda和反向原型,这是ecmascript第一版以来支持的@DenysSeguret@DenysSeguretwhilei-什么?它只是迭代到零。这里没有真正的理由投票。但是请注意,这种循环并不容易将计数器的范围限制在循环中,就像现在使用let一样。啊,速记,我真傻,继续:。我不是那个被否决的人。虽然这段代码非常有效,但它有一个非常高的wtf因子。它依赖于这样一个事实:0的计算结果为false,混淆了语义和实现特性。whilei-什么?它只是迭代到零。这里没有真正的理由进行否决。但是请注意,这种循环并不容易将计数器的范围限制在循环中,就像现在使用let一样。啊,速记,我真傻,继续:。我不是那个被否决的人。虽然这段代码非常有效,但它有一个非常高的wtf因子。它依赖于一个事实,即0的计算结果为false,混淆了语义和实现特性。