Javascript 减法运算符工作,但加法运算符不工作

Javascript 减法运算符工作,但加法运算符不工作,javascript,Javascript,我一直在看一些关于操作员不工作的话题,但无法解决我的问题 我有两个JavaScript代码 <span id="number">this work</span> <span id="miaonumber">this doesn't work</span> <script> setTimeout(start, 1000); var hh = 9999.9999; var num = document.getEle

我一直在看一些关于操作员不工作的话题,但无法解决我的问题

我有两个JavaScript代码

<span id="number">this work</span>
<span id="miaonumber">this doesn't work</span>
<script>
    setTimeout(start, 1000);

    var hh = 9999.9999;
    var num = document.getElementById('number');

    function start() {
        setInterval(increase, 1000);
        }

    function increase() {
        if (hh > 0.0001) {
            hh = (hh-0.0001).toFixed(15);
            num.innerText = hh;
        }
    }

    setTimeout(startmiao, 1000);

    var zz = 8888.8888;
    var nummiao = document.getElementById('miaonumber');

    function startmiao() {
        setInterval(increasemiao, 1000);
    }

    function increasemiao() {
        if (zz > 0) {
            zz = (zz+0.0001).toFixed(15);
            nummiao.innerText = zz;
        }
    }
</script>
这项工作
这不管用
设置超时(开始,1000);
var hh=9999.9999;
var num=document.getElementById('number');
函数start(){
设置间隔(增加,1000);
}
功能增加(){
如果(hh>0.0001){
hh=(hh-0.0001).toFixed(15);
num.innerText=hh;
}
}
设置超时(startmiao,1000);
var zz=8888.8888;
var nummiao=document.getElementById('miaonumber');
函数startmiao(){
设置间隔(增加1000);
}
函数increasemiao(){
如果(zz>0){
zz=(zz+0.0001)。固定(15);
nummiao.innerText=zz;
}
}

会工作,但是
不工作,我打开F12查看,每秒+1个错误
未捕获类型错误:(zz+0.0001)。toFixed不是一个函数

当您使用
.toFixed()
时,您正在将hh和zz转换为字符串。如果你把它们作为数字保存,那么它们都有效。只需将
.toFixed()
移动到设置元素文本的位置

setTimeout(开始,1000);
var hh=9999.9999;
var num=document.getElementById('number');
函数start(){
设置间隔(增加,1000);
}
功能增加(){
如果(hh>0.0001){
hh=hh-0.0001;
num.innerText=hh.toFixed(15);
}
}
设置超时(startmiao,1000);
var zz=8888.8888;
var nummiao=document.getElementById('miaonumber');
函数startmiao(){
设置间隔(增加1000);
}
函数increasemiao(){
如果(zz>0){
zz=zz+0.0001;
nummiao.innerText=zz.toFixed(15);
}
}
这项工作

这不起作用
问题是,您有一个数字并将其转换为字符串,然后再次将其分配给
zz
。然后添加一个数字,但是当
zz
是一个字符串时,您会得到一个字符串,而该字符串没有方法
toString

解决方案:仅将字符串值指定给输出,而不是
zz

函数开始(){
设置间隔(增加,1000);
}
功能增加(){
如果(hh>0.0001){
hh=(hh-0.0001).toFixed(15);
num.innerText=hh;
}
}
函数startmiao(){
设置间隔(增加1000);
}
函数increasemiao(){
如果(zz>0){
zz+=0.0001;
nummiao.innerText=zz.toFixed(15);
}
}
变量hh=9999.9999,
num=document.getElementById('number'),
zz=8888.8888,
nummiao=document.getElementById('miaonumber');
设置超时(开始,1000);
设置超时(startmiao,1000)
这项工作

这不起作用
toFixed
从数值中获取字符串值。然后,当您尝试将
+
与此字符串值一起使用时,它默认为串联文本,而不是添加文本。此新文本不再具有
toFixed
方法

仅当显示值时才使用
toFixed
,以便
zz
保持数字:

function increasemiao() {
    if (zz > 0) {
        zz = (zz+0.0001);
        nummiao.innerText = zz.toFixed(15);
    }
}
(这也是它最初使用8888.8889工作,但在后续迭代中失败的原因。)


第一个版本之所以有效,是因为减法(而不是加法/串联)将值强制为数字。

如果对字符串和数字使用
+
,则结果是字符串,而不是数字。字符串没有固定的
toFixed
。您需要确保
zz
是一个数字(不是在您将
toFixed
的结果赋给它之后),我还要描述一个事实,即使用减法将值强制为一个数字,而加法(串联)则不会。这就是为什么第一个版本有效而第二个版本无效。目前的答案都没有提到这一点。