嗨问题是:
我定义:
var total = 0;
function add(a){
total+=a;
var float_num = total.toFixed(2);
return float_num;
}
JS给我一个错误,说Uncaught TypeError total.toFixed不是函数
我不明白。我声明的总数不是数字类型?
答案 0 :(得分:0)
检查上面的任何代码是否重新定义了Number原型上的toFixed,例如
Number.prototype.toFixed = {};
var total = 0;
function add(a) {
total += a;
var float_num = total.toFixed(2);
return float_num;
}
add(2)
是复制错误的一种方法。
答案 1 :(得分:0)
取决于a
的值。如果a
恰好是"string"
,那么您正尝试这样做:
"0string".toFixed(2)
应该抛出错误。
答案 2 :(得分:0)
这有效:
var total = 1.0;
function add(a) {
total += a;
var float_num = total.toFixed(2);
return float_num;
}
console.log(add(4.89));
这段代码有点不安全,因为你假设a是float而不是字符串。
https://jsfiddle.net/6to7kbbm/
这将抛出异常:
var total = 1.0;
function add(a) {
total += a;
var float_num = total.toFixed(2);
return float_num;
}
console.log(add("4.89"));
答案 3 :(得分:0)
好的,所以我只运行了几次代码,并确认您的.toFixed()
行正常运行。
但是,它仅在您将数值传递给函数时才有效。如果a
参数不是数字,则toFixed()
将失败,如上所述。
所以问题不在于该功能,而在于你如何调用它。在你的问题中,你没有展示你是如何调用这个函数的,所以我不能给你任何直接的指导,除了确保你每次都给它一个数字。
也许你传了一个字符串?这会破坏事情(即使字符串确实包含数值)。
或者由于系统中其他地方的错误或疏忽,可能是null
或undefined
或NaN
?我无法分辨,但在这些情况下,您可能根本不想调用add()
函数。
答案 4 :(得分:0)
我发现了问题。我的其他函数有一个xxx.text(total)的代码。它实际上将总数转换回字符串。这导致了问题。
感谢您的帮助!
答案 5 :(得分:0)
我认为防止错误发生的最简单方法是始终将参数解析为数字:
var total = 0;
function add(a){
total+=a;
var float_num = Number(total).toFixed(2);
return float_num;
}
答案 6 :(得分:0)
验证是否有任何声明的函数与使用的变量同名。为了防止这种情况,您可以声明全局变量,例如:
var global_variable = 0;
function myfunction()
{
var variable = 0;
global_variable = variable + 1;
}