JavaScript求最高平均值遇TypeError错误,请求调试帮助
问题排查与修复方案
错误原因分析
TypeError: Cannot read properties of undefined (reading 'length') 明确说明你在尝试读取一个undefined值的length属性,即循环执行时nums变量为undefined。常见触发场景:
- 函数接收的参数不是有效数组,比如传入了
undefined、null或非数组类型 - 循环逻辑中意外修改了
nums变量,导致其被赋值为undefined - 测试用例存在非法输入,比如未传参数、传入空值
修复步骤
添加参数校验
在函数开头拦截非法输入,避免后续逻辑报错:function findMaxAverage(nums, k) { // 校验nums是否为有效数组,同时检查窗口大小合法性 if (!Array.isArray(nums) || nums.length < k || k <= 0) { return 0; // 可根据业务需求返回null、抛出错误或其他默认值 } // 后续业务逻辑... }检查循环变量操作
确认循环过程中没有意外覆盖nums变量,比如不要在循环内写nums = ...这类修改原变量的代码。验证测试用例
排查测试用例是否符合参数要求:- 避免直接传入
undefined作为第一个参数 - 确保测试用例中的数组是合法类型(不是
null、普通对象等)
- 避免直接传入
示例修复代码
假设原逻辑是滑动窗口求子数组最高平均值,修复后的完整代码如下:
function findMaxAverage(nums, k) { // 参数合法性校验 if (!Array.isArray(nums) || nums.length < k || k <= 0) { return 0; } let sum = 0; // 计算初始窗口和 for (let i = 0; i < k; i++) { sum += nums[i]; } let maxSum = sum; // 滑动窗口遍历 for (let i = k; i < nums.length; i++) { sum = sum - nums[i - k] + nums[i]; maxSum = Math.max(maxSum, sum); } return maxSum / k; } // 合法测试用例 console.log(findMaxAverage([1,12,-5,-6,50,3], 4)); // 输出12.75
调试技巧
- 在循环前添加
console.log(nums),直接查看当前nums的值,确认是否为undefined - 使用浏览器开发者工具的断点功能,在报错行暂停,查看调用栈和变量实时状态
内容的提问来源于stack exchange,提问作者VanDuJo
相关产品推荐
相关产品推荐

