【问题标题】:for loop undefined 'error'for循环未定义的'错误'
【发布时间】:2018-10-21 07:46:44
【问题描述】:

我想要做的是让空数组在 for 循环中记录年数组。这些年显示得非常好,但我一直在控制台末尾收到undefined。有人可以向我解释为什么会这样吗?

P.S - 这里是自学成才的开发者,所以请多多包涵,谢谢!

var empty = [];

var years = [1996, 1997, 2001, 1975, 1943];

for(var empty = 0; empty <= years.length; empty++) {
    console.log(years[empty]);
}

【问题讨论】:

  • &lt;= ... 表示空将为 0...5 ...但仅定义索引 0...4(即 5 个计数)
  • 因为您在最后一个循环中有empty &lt;= years.length,所以empty 将是5years 中没有这样的索引,因此你得到 undefined
  • 变量empy 被定义了两次,首先是一个数组,然后是一个数字。 (并且 empty 不是一个好名字。在 for 循环中,您可以使用 indexidx 或仅使用 i)。您的年份长度为 5 个元素,第一个元素位于索引 0,因此只定义了索引 0 到 4,而不是索引 5。将 &lt;= 更改为 &lt; 并按预期工作。

标签: javascript arrays for-loop console.log


【解决方案1】:

在最后一次迭代中你的empty === 5,所以5 &lt;= years.length === true,因此for循环体使用console.log(years[5])执行,即undefined,因为数组键是从0开始的,例如[0: 1996, 1: 1997, 2: 2001, 3: 1975, 4: 1943]

【讨论】:

    【解决方案2】:

    一个array,您从索引开始到0,然后一个接一个地上升到array's length。让我们假设

    var arr = ['a', 'b', 'c', 'd', 'e']
    

    现在这个array 包含5 elements。好吧,如果你从0 开始计算,你的fifth element index 就是4。但是在您的 loop 中,当索引为 5 时,您会破坏它。由于 index 5 上没有元素,您会收到未定义的错误。

    解决方案 在您检查索引是否为 &lt;= 的地方,将其替换为 &lt;,因为当循环索引达到等于数组中元素总数 5 时,它将中断并退出。

    【讨论】:

      【解决方案3】:

      这里有一个解决方案:

      var empty = [];
      
      var years = [1996, 1997, 2001, 1975, 1943];
      
      for(var empty = 0; empty < years.length; empty++) {
          console.log(years[empty]);
      }
      

      你说你在学习,看看为什么数组索引以0开头。

      【讨论】:

        【解决方案4】:

        您会看到 undefined,因为您正在枚举超出数组的长度。

        --

        试试这个新语法:

        const years = [1996, 1997, 2001, 1975, 1943];
        
        for(let year of years) {
            console.log(year);
        }
        

        或者函数式风格,见Array.prototype.map

        years.map(year => console.log(year))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-26
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 2021-04-12
          • 1970-01-01
          相关资源
          最近更新 更多