前几年,维护一个微商城的前端代码时,发现没库存的商品没显示售罄。
有问题的代码如下:
代码中的item_stock_pos和item_pre表示什么意思,我已忘记,只在我的开发日志中保留有这段代码。
obj[i]["item_stock_pos"] = "1204"; obj[i]["item_pre"] = "15" if (obj[i]["item_stock_pos"] > obj[i]["item_pre"]) { // 本以为执行这里 } else { // 结果执行了这里 }
在浏览器console窗口调试代码
问题原因分析:
在比较两个操作对象的大小时,没有确保操作对象都为数字,导致了if判断没有执行预期的代码。
解决 :
在比较两个操作对象的大小之前,先转换为数字。
1:使用parseInt()把字符串转换为数字。
obj[i]["item_stock_pos"] = "1204"; obj[i]["item_pre"] = "15"; obj[i]["item_stock_pos"] = parseInt(obj[i]["item_stock_pos"]); obj[i]["item_pre"] = parseInt(obj[i]["item_pre"]); if (obj[i]["item_stock_pos"] > obj[i]["item_pre"]) { // .. } else { // .. }
2:使用Number()把字符串转换为数字。
obj[i]["item_stock_pos"] = "1204"; obj[i]["item_pre"] = "15"; obj[i]["item_stock_pos"] = Number(obj[i]["item_stock_pos"]); obj[i]["item_pre"] = Number(obj[i]["item_pre"]); if (obj[i]["item_stock_pos"] > obj[i]["item_pre"]) { // .. } else { // .. }