能否用shift函数清空数组?递归调用shift触发TypeError求解决
使用shift函数清空数组的问题解析
可以用shift函数清空数组,但你的递归写法犯了一个关键错误
你报错的原因很明确:arr.shift()方法返回的是被从数组中移除的单个元素(比如第一次调用时返回的是数字1),而你把这个元素传给了递归的del函数。数字类型根本没有shift方法,自然会抛出TypeError: arr.shift is not a function。
修正后的递归写法
要实现递归清空,你需要在每次调用shift后,继续把原数组传入递归函数——因为shift是直接修改原数组的,每次调用都会让数组长度减1:
let arr = [1,2,3,4]; function del(arr){ if(arr.length === 0){ return []; } else { arr.shift(); // 直接修改原数组,无需接收返回值 return del(arr); // 继续传入原数组进行递归 } } console.log(del(arr)); // 输出 []
额外补充:更高效的清空方式
如果不需要刻意用递归+shift,还有更简单高效的方法:
- 直接设置数组长度为0:
arr.length = 0(会保留原数组的引用) - 重新赋值为空数组:
arr = [](会创建新的空数组,原数组引用会丢失)
内容的提问来源于stack exchange,提问作者Aliayub Ali
相关产品推荐
相关产品推荐

