JavaScript实现range函数时遇RangeError: Invalid array length报错求助
修复RangeError: 无效的数组长度错误及参数校验实现
错误原因分析
你的代码未实现题目要求的参数校验逻辑,当传入非法参数时会触发异常:
- 若传入
step=0且start<=end,循环条件i <= end会永远成立,数组被无限添加元素,直到超出JavaScript允许的最大数组长度(2^32 - 1),触发RangeError: 无效的数组长度。 - 其他非法场景(如
start>end、参数未定义)也会导致不符合预期的结果或潜在异常。
修复后的代码
按照题目要求添加完整参数校验,不满足条件时直接返回空数组:
function range(start, end, step) { // 校验所有参数为整数、start不大于end、step大于0 if (typeof start !== 'number' || !Number.isInteger(start) || typeof end !== 'number' || !Number.isInteger(end) || typeof step !== 'number' || !Number.isInteger(step) || start > end || step <= 0) { return []; } const result = []; for (let i = start; i <= end; i += step) { result.push(i); } return result; } // 测试用例 console.log(range(0, 10, 2)); // 输出 [0, 2, 4, 6, 8, 10] console.log(range(5, 3, 1)); // 输出 [](start>end) console.log(range(0, 10, 0)); // 输出 [](step不大于0) console.log(range(0)); // 输出 [](参数未完全定义)
关键校验点说明
- 确保
start、end、step均为整数类型(符合题目要求的整数参数) - 校验
start <= end,避免反向遍历场景 - 校验
step > 0,防止无限循环或无效步长
内容的提问来源于stack exchange,提问作者Joshua Ramirez
相关产品推荐
相关产品推荐

