前幾天寫微信小程序支付這一塊遇到點問題,最后解決發現是js數據類型轉換的原因:
這是后臺傳來的數據
info: {
explain: "提現至微信賬戶,1-5個工作日到賬",
minAmount: 100, //最低提現金額
ecacshStatus: 0, //0可提現,1提現中,2不可提現
balance: "1.00"
},
這是用戶需要輸入提現的金額
input.inputClass(type="digit" :value="amount" @input="inputAmount")
點擊提交做判斷時出了問題:
if (this.amount > this.info.balance) {
wx.showModal({
title: "提示",
content: "余額不足",
showCancel: false,
confirmText: "確定"
});
}
假設this.info.balance="30"元,用戶輸入的值拿到后為"5"(this.amount = "5"),兩個數作比較,這時if (this.amount > this.info.balance) 的結果為true... 所以就一直顯示余額不足,最后找到問題原因,發現輸入框里拿到的值類型為String,后臺傳來的值類型也是String,兩個字符串做比較時,只比較第一位的大小,也就是30元只比較第一位,(字符串'5' > 字符串'3'),
好吧,對于這種了解過但是很少遇到的實戰問題,基礎知識,這種錯誤確實不應該再犯了,所以今天做個筆記時刻提醒自己
首先不知道數據類型的情況下,先檢測數值的數據類型
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 沒有聲明)
typeof null // 返回 object
JavaScript 類型轉換
(1) String() 可以將數字轉換為字符串。
該方法可用于任何類型的數字,字母,變量,表達式:
var x = 123;
String(x) //123 // 將變量 x 轉換為字符串并返回
String(123) //123 // 將數字 123 轉換為字符串并返回
String(100 + 23) //123 // 將數字表達式轉換為字符串并返回
(2) 將字符串轉換為數字
第一種
字符串包含數字(如 "3.14") 轉換為數字 (如 3.14).
空字符串轉換為 0。
其他的字符串會轉換為 NaN (不是個數字)。
Number("3.14") // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
在 Number 方法 章節中,你可以查看到更多關于字符串轉為數字的方法:
其他方法:
parseFloat() 解析一個字符串,并返回一個浮點數:
<script>
document.write(parseFloat("10") + "<br>");
document.write(parseFloat("10.33") + "<br>");
document.write(parseFloat("34 45 66") + "<br>");
document.write(parseFloat(" 60 ") + "<br>");
document.write(parseFloat("40 years") + "<br>");
document.write(parseFloat("He was 40") + "<br>");
</script>
以上實例輸出結果:
10
10.33
34
60
40
NaN
parseInt() 解析一個字符串,并返回一個整數:
radix 代表進制數
parseInt("10"); //返回 10
parseInt("19",10); //返回 19 (10+9)
parseInt("11",2); //返回 3 (2+1)
parseInt("17",8); //返回 15 (8+7)
parseInt("1f",16); //返回 31 (16+15)
parseInt("010"); //未定:返回 10 或 8
Number 對象方法
| 方法 | 描述 |
| isFinite | 檢測指定參數是否為無窮大。 |
| toExponential(x) | 把對象的值轉換為指數計數法。 |
| toFixed(x) | 把數字轉換為字符串,結果的小數點后有指定位數的數字。 |
| toPrecision(x) | 把數字格式化為指定的長度。 |
| toString() | 把數字轉換為字符串,使用指定的基數。 |
| valueOf() | 返回一個 Number 對象的基本數字值。 |
toFixed()
方法可把 Number 四舍五入為指定小數位數的數字。
var num = 5.56789;
var n=num.toFixed(2);
n 輸出結果:
5.57
將一個數字,不留任何小數:
var num = 5.56789;
var n=num.toFixed();
n 輸出結果:
6
toPrecision() 方法
把數字格式化為指定的長度:
var num = new Number(13.3714);
var n=num.toPrecision(2);
n 輸出結果:
13
使用不同進制把數字格式化為指定的長度:
var num = new Number(13.3714);
var a = num.toPrecision();
var b = num.toPrecision(2);
var c = num.toPrecision(3);
var d = num.toPrecision(10);
a,b,c, 和 d 輸出結果:
13.3714
13
13.4
13.37140000
toString() 方法
把數字轉換為字符串:
var num = 15;
var n = num.toString();
n 輸出結果:
15
在本例中,我們使用不同進制把一個數字轉換為字符串:
var num = 15;
var a = num.toString();
var b = num.toString(2);
var c = num.toString(8);
var d = num.toString(16);
a,b,c, 和 d 輸出結果:
15
1111
17
f