首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于循环行为"TypeError:无法读取未定义的属性的‘长度’“

对于循环行为"TypeError:无法读取未定义的属性的‘长度’“
EN

Stack Overflow用户
提问于 2019-01-05 13:37:53
回答 3查看 2K关注 0票数 0

我在对这类问题的答复中找不到答案。我不明白,为什么控制台会抛出这个错误"TypeError:无法读取未定义的“的属性'length‘,而我的for-循环包含此条件。

代码语言:javascript
复制
  for (let i = 0; i <= res.length; i++) {
    arr.push(res[i].length);
  }

没有等号的,它能工作。

我不明白为什么。我认为设置i=1是可行的。但事实并非如此。有谁能解释一下,为什么在给定条件时我会出错?

代码语言:javascript
复制
i>**=**res.length; (with equal sign)

完整代码

代码语言:javascript
复制
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");

谢谢大家,新年快乐。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-05 14:24:58

,因为数组的索引总是长度- 1.

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-01-05 13:41:06

基本上,Array的索引是基于零的。

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

代码语言:javascript
复制
array = [1, 2, 3] // length === 3

如果你一直循环到3

代码语言:javascript
复制
array[3]

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

票数 1
EN

Stack Overflow用户

发布于 2019-01-05 14:24:05

数组在JavaScript中是零的。

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

请注意,这个数组的长度为3。因此,当您在循环中从0迭代到长度时,会增加一个索引,从而得到undefined。要么从循环中的0 to <= res.length - 10 to < res出发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54052561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档