商品实际库存 0,活动页按钮还是亮的,点提交才报「库存不足」,接口返回的是 {"stock":"0"},控制台里数字 0 和字符串比较的结果是 false。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

const stock = Number(res.data.stock);
btn.disabled = !Number.isFinite(stock) || stock <= 0;

库存字段在 JSON 里是字符串,前端用全等号和数字比较,类型不同直接判 false,售罄逻辑整段没生效。模板里另一处用了宽松比较,两套判断结果不一致。这一点先确认清楚,后面就不用反复试。

碰到「库存类型比较」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,接口层统一把库存转成整数,别再让前端猜类型;前端比较前先 Number() 一次,或者直接用 Number(stock) <= 0 判断;用库存为 0 和 1 的两个 SKU 各点一次,确认按钮状态跟着变。

改完照着核一遍,库存 0 的商品按钮立刻置灰,库存 1 的可以点,两个 SKU 切换不再串状态。

作者 9823189