如何使用JS清空现有数组内全部对象 重置条件触发后数组仍存入对象问题求解
问题诱因
- 重置逻辑执行后仍有其他业务代码调用
checkoldval函数,传入非true值将新对象推入已清空的数组,从你给出的输出结果中current字段为数字14、13也可验证这一点 - 直接使用
arr = []清空数组存在引用不同步问题:该操作只会让arr变量指向一个新的空数组,若代码其他位置持有原数组的引用,依旧可以访问到未清空的旧数据 - 代码中
result变量未显式声明,自动成为全局变量,极易被其他逻辑意外修改,导致传入checkoldval的参数不符合预期 - 使用
==宽松相等判断存在隐式转换风险,传入布尔包装对象、数字1这类值时,判断结果可能不符合预期
修复方案
优化后代码
$( "#reset" ).click(function() { // 显式声明变量,避免全局污染 const result = true; checkoldval(result); }); var arr = []; function checkoldval(current_val){ var total = 0; // 改用严格相等判断,规避隐式转换问题 if(current_val === true){ // 直接清空原数组内容,所有持有该数组引用的位置都会同步拿到清空后的结果 arr.length = 0; }else{ arr.push({'total':total ,'current':current_val}); } }
额外检查项
- 排查所有调用
checkoldval的逻辑,确认重置操作触发后,不会有多余的调用请求传入非true参数 - 复杂项目场景下建议将
arr和相关操作封装到独立作用域中,避免全局变量被意外篡改
内容的提问来源于stack exchange,提问作者user16414117
相关产品推荐
相关产品推荐

