Почему по умолчанию выполняется, даже если число равно 1?

#javascript

Вопрос:

 let spans = document.querySelector(`#spans`);
let hrs = document.querySelector(`#hrs`);
let mins = document.querySelector(`#mins`);
let secs = document.querySelector(`#secs`);
let start = document.querySelector(`#start`);
let stop = document.querySelector(`#stop`);
spans.style.fontSize = "10em";
let preFix = 0;
let num = 1;
let secspreNum= 0;
let minspreNum = 0;
let hrspreNum = 0;
let myFunc = ()=> {
    setInterval(()=>{
        switch (num){
            case num===1:
                mins.innerHTML = `0`   num;
                num ===0;
                secs.innerHTML =`0`   num  ; 
                
            default:
                console.log(`default test`)
        }
      
     } , 1000);
};


start.addEventListener(`click`,myFunc)        
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="spans">
    <span id="hrs">00</span>:<span id="mins">00</span>:<span id="secs">00</span><br></div>
    <button id="start">Start</button>
    <button id="stop">Stop</button>

    <script src="go2.js"></script>
</body>
</html> 

Здравствуйте, я пытаюсь сделать банкомат с секундомером, но у меня возникла проблема. Попытка использовать оператор switch для установки минут, чтобы сложить число, если секунды достигнут 10. Но прежде чем сделать это, я протестировал этот оператор switch, и по какой-то причине он запускает оператор по умолчанию вместо case . Почему все так происходит? Я установил переменную num в 1, и она по-прежнему работает по умолчанию вместо num===1 . Неужели я что-то упустил из виду? Спасибо!

Комментарии:

1. num ===0 это не задание. Где ваш расчет часов, минут и секунд?

2. Вы хотите case 1: (не case num === 1: хотите ), и вам нужно break; в конце, раньше default: . case s-это константы, а не сравнения.

3. Прочитайте документацию: = , === , switch .

4. Хороший эксперимент, Джон! Удачи с остальным. Первые два комментария-это хороший путь.

Ответ №1:

Вот рабочая версия

Я изменил ваш запрос и ненужные литералы шаблонов

 let spans = document.getElementById('spans');
let hrs = document.getElementById('hrs');
let mins = document.getElementById('mins');
let secs = document.getElementById('secs');
let start = document.getElementById('start');
let stop = document.getElementById('stop');
let tId;
let num = 0;
let myFunc = () => {
  clearInterval(tId);
  tId = setInterval(function() {
    const date = new Date(null); // alternatively calculate hh,mm,ss using `
    date.setSeconds(  num);
    const [hh, mm, ss] = date.toISOString().substr(11, 8).split(":");
    hrs.textContent = hh;
    mins.textContent = mm;
    secs.textContent = ss;
  }, 1000)
};


start.addEventListener('click', myFunc)
stop.addEventListener('click', function() {
  clearInterval(tId)
}) 
 #spans {
  font-size: 10em
} 
 <!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="spans">
    <span id="hrs">00</span>:<span id="mins">00</span>:<span id="secs">00</span><br></div>
  <button id="start">Start</button>
  <button id="stop">Stop</button>

  <script src="go2.js"></script>
</body>

</html> 

Ответ №2:

попробуйте это:

 let myFunc = ()=> {
    setInterval(()=> {
        switch (num) {
            case 1:
            console.log(num)
                mins.innerHTML = `0`   num;
                secs.innerHTML =`0`  (num  ); 
                break;
                
            default:
                console.log(`default test`)
        }
      
     } , 1000);
};
 

случай принимает константы, а не выражения afaik. Вы также должны break это сделать, иначе код «провалится» до следующего условия.