javascript - 三元运算符 JS 的问题
问题描述
我有一个问题。所以我正在制作一个计时器,它工作正常,但有一件事。因此,当分钟 < 10 时,它应该在前面加上 0。但是,当条件为真时,它会添加很多 0))。此外,当计时器到达 00:00 时,它应该停止,但秒数仍保持在 00:01。
class Timer{
constructor(minute,second){
this.minute = minute;
this.second = second
}
start(){
let s = this.second;
let m = this.minute
let h1 = document.createElement("h1")
timer.addEventListener("click" , ()=>{
let time = setInterval(()=>{
s = s >= 10?s : "0" + s;
// m = m >= 10?m : "0" + m;//
h1.innerHTML = m + ":" + s
console.log(this)
s--
if(m == 0 && s == 0){
clearInterval(time)
}
if(s == 0){
m--
s=59
}
console.log(s)
},1)
})
document.body.append(h1)
}
}
let time = new Timer(2,20)
time.start()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="timer">Timer</button>
</body>
<script src="script.js"></script>
</html>
你能检查一下所附的代码吗?谢谢!
解决方案
在这一行:
s = s >= 10?s : "0" + s;
你(可能)变成s
了一个字符串,所以,例如,如果现在有数字s
的值,它就变成了string。 6
"06"
下面几行你正在尝试执行:s--
这意味着你正在尝试从字符串中减去 1。
相同的注释适用于m
当前被注释掉的行。
尝试将您正在使用的数值与您在 HTML 中使用的显示变量分开 - 会有所帮助。
另一个不相关的建议:不要使用单字母变量名称(for 循环中的索引除外):重命名s
为seconds
(或者如果您真的想将一些 ket-strokes 保存到secs
)和m
to minutes
。通过这样做,您可以使您的代码更易于阅读,并且众所周知:我们阅读代码的次数比编写代码的次数要多,因此优化阅读是正确的做法!
可能还有其他问题,但您可以从这个开始并从那里开始。
推荐阅读
- javascript - 用ajax加载一个光滑的幻灯片轮播
- python - 在标准化图中可视化值
- c++ - c++ 从 String 到 Bitboard 的转换和反向优化
- sparql - 使用 SPARQL 查询按 GDP 重新创建 Wikipedia 州列表
- mvvm - DataGrid 中的 RichTextBox 更新 (mvvm)
- python - 将数组的数据类型从 double 更改为 int 的问题
- windows - 如何查看哪些用户正在调用 Windows 服务托管的 WCF Web 服务?
- android - 从 Android 前台服务迁移到 WorkManager
- c - 如何分配一个指向列表的指针并在c中打印出来?
- solidity - 为什么我的 Solidity 构造函数需要两个未在参数中指定的变量?