前几年,维护一个微商城的前端代码时,发现没库存的商品没显示售罄。
有问题的代码如下:
代码中的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 {
// 结果执行了这里
}
问题原因分析:
在比较两个操作对象的大小时,没有确保操作对象都为数字,导致了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 {
// ..
}