在实际项目开发中发现了一个特别有趣的现象,虽然并不是什么高大上的东东,但应该算是前端js中常常会面临到的一个小小坑~这里跟大家分享一下
var a = "12345", b = "6789";
console.log((a+b).toFixed(2));
console.log((a-b).toFixed(2));
console.log((a/b).toFixed(2));
console.log((a*b).toFixed(2));
先猜测一下输出的结果会是什么?
结果是:
Uncaught TypeError: ("12345" + "6789").toFixed is not a function
"5556.00"
"1.82"
"83810205.00"
查看运算结果类型:
typeof("12345"-"6789") //number
typeof("12345"*"6789") //number
typeof("12345"/"6789") //number
typeof("12345"+"6789") //string
减、乘、除由于运算之后的结果变成了number类型,所以都可以正常调用toFixed,而字符串运用加法后并没有改变数据类型还是字符串,故调用toFixed失败!
这个在后台数据返回字符串类型的数字,并且需要在前台做运算时,容易被忽略掉。
解决方案:
在做运算前,先parseFloat
(paesrFloat("12345")+parseFloat("6789")).toFixed(2) //"19134.00"