我正在尝试创建两个方法:一个用于将数字增加0.1,另一个用于减少相同的值。但是我遇到了一个意想不到的行为:我可以使用number = (number - 0.1).toFixed(1);
正确地减少数量,但是当我试图以相同的方式增加数量时(它只能运行一次),我得到了错误:< / p>
“Uncaught TypeError :( number + 0.1).toFixed不是函数”
以下是代码:
var number = 0.5;
console.log('Number: ', number)
function increase() {
if (number < 1) {
number = (number + 0.1).toFixed(1);
console.log('Number: ', number)
}
}
function decrease() {
if (number > 0) {
number = (number - 0.1).toFixed(1);
console.log('Number: ', number)
}
}
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>
我的问题是:为什么?我应该如何更正我的代码,修复我的increase
方法?
提前致谢
答案 0 :(得分:5)
toFixed()
方法返回string
类型,string
没有toFixed()
方法 - 导致错误.toFixed is not a function
。
要解决此问题,请将toFixed()
的输出强制恢复为number
。这可以使用Number()
或前缀+
的简写方法来完成。
Number((0.1).toFixed())
+(0.1).toFixed()
var number = 0.5;
console.log('Number: ', number)
function increase() {
if (number < 1) {
number = Number((number + 0.1).toFixed(1));
console.log('Number: ', number)
}
}
function decrease() {
if (number > 0) {
number = Number((number - 0.1).toFixed(1));
console.log('Number: ', number)
}
}
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>
答案 1 :(得分:3)
toFixed
方法的返回值是一个字符串,如MDN web docs中所述:
返回值:使用定点表示法表示给定数字的字符串。
因此,在第一次调用increase
或decrease
时,变量number
的值将为字符串类型。
之后调用increase
:
number + 0.1
的类型为字符串,因为字符串+数字是字符串,toFixed
不是的函数字符串 s,这就是你得到错误的原因:
未捕获的TypeError :(数字+ 0.1)。toFixed不是函数
但是,number - 0.1
会有效,因为字符串 - 数字是数字,这很好。
要解决此问题,您应该保留数字的number
,并且可以通过多种方式执行此操作:
number = parseFloat((number + 0.1).toFixed(1));
number = Number((number + 0.1).toFixed(1));
+
: number = +((number + 0.1).toFixed(1));