使用按钮修改JavaScript参数值异常:点击按钮无响应参数值未变化
异常问题原因定位及修复
- 函数名绑定不匹配:代码中实际定义的点击触发函数是
getBack,但按钮的onclick属性绑定的是未定义的getPreviousMap,点击时浏览器找不到对应的执行函数,完全没有任何响应,控制台会抛出getPreviousMap is not defined的报错。 - 比较、赋值逻辑错误:数组
array中存储的是对象结构(每一项形如{value: 1}、{value: 3}),但代码始终用数值类型的Id变量(初始值为31)直接和数组项做相等判断。JavaScript中原始类型和对象类型的相等比对的是内存引用,哪怕逻辑值完全一致,比较结果也永远为false,导致所有判断分支无法触发。
就算判断条件能匹配,代码中的赋值操作Id = array[i - 1]也没有取对象的value属性,而是把整个对象赋值给Id,会导致Id从数值类型变为对象类型,和修改数值参数的预期目标完全不符。 - 边界判断缺失:就算修正了上述比较、赋值逻辑,原代码的循环逻辑也存在漏洞:如果匹配到数组第0项(循环索引i=0),执行取前一项的操作时会访问
array[-1]这个不存在的索引值;同时原代码第一个分支的判断条件Id == array[0],也会因为前述的比较逻辑问题永远无法触发。
修正后的参考实现代码
<script> const jArray = [{"value":"1"},{"value":"3"}]; const array = []; let Id = 31; // 初始化数组 for (let i = 0; i < jArray.length; i++) { array.push({ value: parseInt(jArray[i].value) }); } function getBack() { // 遍历匹配数组项,比较时取数组项的value属性和Id做对比 for (let i = 0; i < array.length; i++) { if (Id === array[i].value) { // 增加边界判断,只有非首项时才取前一项的value值 if (i > 0) { Id = array[i - 1].value; } console.log("修改后的Id值:", Id); return; } } } </script> <!-- 绑定正确的函数名 --> <button onclick="getBack()">get previous map</button>
内容的提问来源于stack exchange,提问作者Ifor
相关产品推荐
相关产品推荐

