如何修复TypeError:无法读取JavaScript中未定义的属性“长度”?

时间:2019-10-21 12:04:45

标签: javascript typeerror

我正在尝试解决有关查找字符串中最长单词的一个非常简单的挑战。 这是代码:

function find(par) {
    let arrayWord = par.split(" ");
    let longestWord = "";
    for (let i = 0; i <= arrayWord.length; i++) {
        if (longestWord.length < arrayWord[i].length) {
            longestWord = arrayWord[i]
        }
    }
    return longestWord;
}
find("Find the longest word");

我需要帮助来了解为什么会出现此错误:

  

未捕获的TypeError:无法读取未定义的属性'length'       找到时(:5:47)       在:11:1处找到@ VM959:5(匿名)@ VM959:11

谢谢。

2 个答案:

答案 0 :(得分:3)

只需将条件<=更改为<并尝试

function find(par) {
    let arrayWord = par.split(" ");
    let longestWord = "";
    for (let i = 0; i < arrayWord.length; i++) {
        if (longestWord.length < arrayWord[i].length) {
            longestWord = arrayWord[i]
        }
    }
    return longestWord;
}

console.log(find("Find the longest word"));

答案 1 :(得分:1)

无法读取未定义的属性“ length”,是因为它无法找到某种类型的变量(在您的情况下为字符串)来调用函数的长度。在您的情况下,因为检查中没有元素arrayWord [arrayWord.length],所以arrayWord [i] .length不适用于最后检查条件的字符串。这就是为什么arrayWord [i] .length在最后一次迭代中给您一个错误的原因。只需将i <= arrayWord.length更改为i

function find(par) {
  let arrayWord = par.split(" ");
  let longestWord = "";
  for (let i = 0; i <arrayWord.length; i++) {
    if (longestWord.length < arrayWord[i].length) {
      longestWord = arrayWord[i]
    }
  }
  return longestWord;
}

编辑:根据RobG的建议进行更改