You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏保存加载模块异常:挖矿时出现NaN值问题求助

问题排查与修复方案

我帮你找到了挖矿数值变成NaN的核心原因,也整理了完整的修复步骤,咱们一步步来解决:

首先,问题出在**save()函数处理localStorage数据的逻辑上**:当你第一次打开页面,或者localStorage里还没有保存过数据时,localStorage.getItem()会返回null,而parseInt(null)的结果是NaN。一旦satoshi、dash这类变量变成了NaN,后续的加法运算(比如satoshi = satoshi + hash)结果自然也会变成NaN,这就是你看到的异常。

具体修复步骤

1. 修复save()函数,给空值加默认兜底

修改save()函数,在解析localStorage数据时添加默认值,避免出现NaN:

function save() {
  // 用||运算符处理空值:如果parseInt返回NaN,就用后面的默认初始值
  dash = parseInt(localStorage.getItem("dash")) || 0;
  satoshi = parseInt(localStorage.getItem("satoshi")) || 0;
  dhash = parseInt(localStorage.getItem("dhash")) || 1;
  hash = parseInt(localStorage.getItem("hash")) || 1;
}

这里的逻辑是:如果localStorage里没有对应数据,就用你最初设定的初始值(0或1),保证变量永远是有效的数字。

2. 页面加载时同步更新显示

现在页面加载时只调用了save(),但没有立刻更新页面上的数值显示,导致页面显示和实际变量值不一致。修改HTML的onload事件:

<body onload="save(); update(); updates()" onunload="boop()">

这样页面加载后,会先加载保存的数据,再立刻把最新数值渲染到页面上。

3. 优化定时器逻辑(可选但推荐)

你当前用setTimeout递归调用的方式容易产生定时器堆积,换成setInterval会更清晰稳定,比如修改BTC挖矿相关的函数:

function update() {
  document.getElementById('hashspersecond').innerHTML = "Satoshis: " + satoshi;
}

function minebtc() {
  satoshi = satoshi + hash;
  update();
}

// 重构启动挖矿的逻辑,避免重复创建定时器
function startMineBtc() {
  stop();
  minebtcTimer = setInterval(minebtc, 1000);
}

function stop() {
  clearInterval(minebtcTimer);
}

对应的HTML按钮也要改成调用新的启动函数:

<button onclick="startMineBtc()"><img src="kop.png" height=28 width=32>Mine BTC</button>

同理可以修改DASH的挖矿逻辑,这样代码更易维护,也不会出现多个定时器同时运行的问题。

验证效果

修复完成后,第一次打开页面会使用默认初始值,挖矿时数值正常增长;刷新页面后会加载之前保存的数据,继续正常挖矿,再也不会出现NaN的情况了。

内容的提问来源于stack exchange,提问作者mahan lorik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:28:38