JS网页宠物游戏数值异常:点击增加睡眠值直接跳至100求助
问题排查与修复方案
核心问题1:ariaValueNow类型错误
DOM元素的ariaValueNow属性返回的是字符串类型,直接和数字相加会触发字符串拼接而非数值运算。比如当前值是"48",加3会变成"483",这个值远大于100,导致increaseStat直接进入else分支把值设为100。
修复:在获取currentPercent时转为数值类型:
function increaseStat(stat, value) { // 转为数值类型 let currentPercent = Number(stat.ariaValueNow); if ((currentPercent + value) <= 100) { stat.ariaValueNow = currentPercent + value } else { stat.ariaValueNow = 100 } // 补充%符号,确保宽度设置正确 stat.style.width = `${stat.ariaValueNow}%` } // dropStat函数同样需要修复类型问题 function dropStat(stat, value) { let currentPercent = Number(stat.ariaValueNow) if (currentPercent > 0) { stat.style.width = `${currentPercent - value}%` stat.ariaValueNow = currentPercent - value } }
核心问题2:变量名拼写错误
getSleep函数里调用increaseStat(rest,sleepvalue)时,变量名写成了小写的sleepvalue,但实际定义的是sleepValue(大写V),导致传入undefined。undefined和数值相加结果为NaN,NaN <=100判断为false,进而触发设为100的逻辑。
修复:修正变量名:
function getSleep() { const currentEnergyValue = Number(rest.ariaValueNow) // 取消注释后需确保变量已定义 // const sleepQuality = getRandomInRange(0.7,1) * (Number(health.ariaValueNow)/100) const sleepValue = baseSleepIncrease // 修正变量名拼写 increaseStat(rest, sleepValue) // 若启用这行需先定义baseHealthIncrease // increaseStat(health, (baseHealthIncrease * sleepQuality)) alert(`current value of sleep:${sleepValue}`) }
其他潜在问题修复
- 随机数函数逻辑错误:
getRandomInRange当前返回值会大于max,修正后返回min到max之间的随机数:
function getRandomInRange(min,max) { return (Math.random() * (max - min)) + min }
- 未定义变量补充:
setInterval中idleHealthDropOff、idleRestDropOff,以及getSleep中baseHealthIncrease需提前声明数值,避免报错。
内容的提问来源于stack exchange,提问作者Kevin H
相关产品推荐
相关产品推荐

