for循环行为“ TypeError:无法读取未定义的属性'length'”

时间:2019-01-05 13:37:54

标签: javascript for-loop undefined

对于已经问过的此类问题,我没有找到答案。 我不明白,为什么当我的for循环包含此条件

时,控制台会引发此错误“ TypeError:无法读取未定义的属性'length'”
  for (let i = 0; i <= res.length; i++) {
    arr.push(res[i].length);
  }

没有等号

我不明白为什么。我以为设置i = 1会起作用。但事实并非如此。 任何人都可以解释一下,为什么在给出条件时出现错误

i>**=**res.length; (with equal sign)

完整代码

function findLongestWordLength(str) {
  var arr = [];
  var res = str.split(" ");
  for (let i = 1; i < res.length; i++) {
    arr.push(res[i].length);
  }

  return Math.max(...arr);
}

findLongestWordLength("May the force be with you");

谢谢你,新年快乐。

3 个答案:

答案 0 :(得分:1)

Array的索引基本上从零开始。

如果循环直到长度,则最后一个索引将结束。

array = [1, 2, 3] // length === 3

如果您循环播放到3

array[3]

您得到undefined,或者如果元素应该是对象,则您会遇到上述错误。

答案 1 :(得分:1)

因为数组的索引始终为长度-1。

您可以说。假设您的数组长度为2

const ar = ["a", "b"]

,如果您检查此数组的长度,它将显示 2 ,但此数组的最大索引仅为 1

因此,当您遍历数组的长度时,它会上升到索引2,而res[2]undefined

答案 2 :(得分:0)

数组在JavaScript中从零开始。

例如:如果数组var arr = [10,20,30]中有3个数字,则这些数字的索引将为0 1, 2,即,您可以使用10,{{ 1}}和arr[0],以及20arr[1]

请注意,此数组的长度将为3。因此,当您在循环中从0迭代到长度时,您多了一个索引,因此得到30。在您的循环中从arr[2]undefined进入。