首页 > 解决方案 > 三元运算符 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>

你能检查一下所附的代码吗?谢谢!

标签: javascript

解决方案


在这一行:

s = s >= 10?s : "0" + s;

你(可能)变成s了一个字符串,所以,例如,如果现在有数字s的值,它就变成了string 6 "06"

下面几行你正在尝试执行:s--这意味着你正在尝试从字符串中减去 1。

相同的注释适用于m当前被注释掉的行。

尝试将您正在使用的数值与您在 HTML 中使用的显示变量分开 - 会有所帮助。

另一个不相关的建议:不要使用单字母变量名称(for 循环中的索引除外):重命名sseconds(或者如果您真的想将一些 ket-strokes 保存到secs)和mto minutes。通过这样做,您可以使您的代码更易于阅读,并且众所周知:我们阅读代码的次数比编写代码的次数要多,因此优化阅读是正确的做法!

可能还有其他问题,但您可以从这个开始并从那里开始。


推荐阅读