javascript比較數字大小時,記得把比較物件轉為數字型別
阿新 • • 發佈:2022-03-30
前幾年,維護一個微商城的前端程式碼時,發現沒庫存的商品沒顯示售罄。
有問題的程式碼如下
程式碼中的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 {
// ..
}