开发者问题收集

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

2019-10-21
21785

我正在尝试解决一个非常简单的难题,即找出字符串中最长的单词。 这是代码:

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

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

Uncaught TypeError: Cannot read property 'length' of undefined at find (:5:47) at :11:1 find @ VM959:5 (anonymous) @ VM959:11

谢谢。

2个回答

无法读取未定义的属性“length”是因为无法找到特定类型的变量(在您的情况下是字符串)来调用函数 length。在您的情况下,arrayWord[i].length 不是您检查的最后一个条件的正确字符串,因为数组中不存在元素 arrayWord[arrayWord.length]。这就是 arrayWord[i].length 在您的最后一次迭代中给出错误的原因。只需将 i <= arrayWord.length 更改为 i < arrayWord.length

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 的建议进行更改

Achal Gupta
2019-10-21

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

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"));
Aman Kumar
2019-10-21