如何调试这段返回undefined的JavaScript二分查找代码?
二分查找代码调试问题分析
你的代码存在两个关键问题,导致运行后返回undefined:
1. 查找区间的指针更新逻辑完全写反
当中间值arr[mid] < key时,说明目标值在右半区间,应该将low更新为mid + 1(缩小到右半区继续查找);而当arr[mid] > key时,目标值在左半区间,需要将high更新为mid - 1(缩小到左半区继续查找)。你当前的代码把这两个分支的操作搞反了,导致查找方向错误,循环提前结束后无法触发return mid。
2. 未处理查找失败的返回值
循环结束意味着目标值不存在于数组中,但你把return -1注释掉了,函数会默认返回undefined。即使修复了查找逻辑,未找到目标的场景也需要明确返回值。
修复后的代码
function binarySearch(arr, key) { let low = 0; let high = arr.length - 1; let mid; while (low <= high) { mid = Math.floor((high + low) / 2); if (arr[mid] == key) { return mid; } else if (arr[mid] < key) { // 目标在右半区,移动low指针 low = mid + 1; } else { // 目标在左半区,移动high指针 high = mid - 1; } } // 未找到目标,返回-1 return -1; } console.log(binarySearch([2, 3, 4, 10, 40], 10)); // 输出3
修复后运行代码,查找10会正确返回索引3;若查找不存在的值(比如5),会返回-1,不会再出现undefined的情况。
内容的提问来源于stack exchange,提问作者Linh Chi
相关产品推荐
相关产品推荐

