You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用length属性时出现「TypeError: Cannot read property 'length' of undefined」错误的原因

问题分析与修复方案

错误原因

你遇到的TypeError: Cannot read property 'length' of undefined是因为循环逻辑的边界错误:

  • 当for循环的条件是i < arr.length时,i会遍历到数组最后一个元素的索引(比如示例数组长度为3,i会到2)。
  • 此时i+1等于数组的长度(3),而数组的索引范围是0到length-1,所以arr[i+1]是undefined,尝试读取它的length属性就会抛出错误。

另外你的代码还有两个冗余/不合理的地方:

  • [arr[i]] = [arr[i+1]]这行交换数组元素的代码完全没必要,我们只需要记录最长单词,不需要修改原数组。
  • 初始的longest未赋值,如果传入只有一个单词的短语,循环不会执行,最终返回undefined,不符合预期。

修复后的代码(基础循环版)

const longestWord = (phrase) => {
  const arr = phrase.split(" ");
  // 处理空输入的极端情况
  if (arr.length === 0) return "";
  // 初始化最长单词为数组第一个元素
  let longest = arr[0];

  // 从第二个元素开始遍历比较
  for (let i = 1; i < arr.length; i++) {
    if (arr[i].length > longest.length) {
      longest = arr[i];
    }
  }
  return longest;
}

let longWhich = longestWord("Web Development Tutorial");
console.log(longWhich); // 输出 "Development"

更简洁的实现(reduce方法)

如果你想让代码更简洁,可以用数组的reduce方法直接迭代找出最长单词:

const longestWord = (phrase) => {
  const arr = phrase.split(" ");
  // reduce迭代,每次比较当前元素和已记录的最长单词
  return arr.reduce((longest, current) => 
    current.length > longest.length ? current : longest, 
    "" // 初始值设为空字符串,兼容空输入
  );
}

let longWhich = longestWord("Web Development Tutorial");
console.log(longWhich); // 输出 "Development"

内容的提问来源于stack exchange,提问作者Normye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:15:26