for loop behavior "TypeError: Cannot read property 'length' of undefined"

for loop behavior "TypeError: Cannot read property 'length' of undefined"

我在已经问过的此类问题的回复中找不到答案。 我不明白,为什么控制台会抛出这个错误 "TypeError: Cannot read 属性 'length' of undefined" ,当我的 for-Loop 包含此条件时

  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");

谢谢,新年快乐。

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

如果循环到长度,则最后一个索引为 1。

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

如果循环直到 3,

array[3]

你得到 undefined,或者如果元素应该是一个对象,那么你会得到上面提到的错误。

数组在 JavaScript 中基于零。

例如:如果数组 var arr = [10,20,30] 中有 3 个数字,那么这些数字的索引将为 0 1, 2 即您可以使用 arr[0] 访问 1020arr[1]30arr[2]

请注意,此数组的长度将为 3。因此,当您在循环中从 0 迭代到 length 时,您多了一个索引,因此您得到 undefined。在循环中从 0 to <= res.length - 10 to < res 开始。

因为数组的下标总是长度-1.

可以说。假设你有长度为 2

的数组

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

如果你检查这个数组的长度,它会显示 2 但这个数组的最大索引只有 1

所以当你遍历数组的长度时,它上升到索引 2,res[2]undefined