前几天写微信小程序支付这一块遇到点问题,最后解决发现是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() 解析一个字符串,并返回一个整数:

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
网友评论