Javascript 减法运算符工作,但加法运算符不工作
我一直在看一些关于操作员不工作的话题,但无法解决我的问题 我有两个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
<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
的结果赋给它之后),我还要描述一个事实,即使用减法将值强制为一个数字,而加法(串联)则不会。这就是为什么第一个版本有效而第二个版本无效。目前的答案都没有提到这一点。