@tostershmoster

Почему при вводе нуля выполняется else, но при этом выполняется преобразование из условия if?

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>JS test</title>
</head>
<body>
  <script type="text/javascript">

    let num = prompt('введите число:', 0);

    if ( num = Number(num) ){
      alert('in if');
      if (num > 0) {
        alert(typeof(num));
        alert('1');
      }else if (num < 0){
        alert(typeof(num));
        alert('-1');
      }else if(num == 0){
        alert('0');
      }
    }else{
      alert('in else');
      alert(typeof(num));
      alert('Это не число!');
    }

  </script>
</body>
</html>
  • Вопрос задан
  • 89 просмотров
Решения вопроса 3
Fragster
@Fragster
помогло? отметь решением!
Первую часть надо заменить на
let num = Number(prompt('введите число:', 0));
if (!isNan(num ))

а сейчас там присваивание вместо сравнения
Ответ написан
Комментировать
VlasenkoFedor
@VlasenkoFedor
Программист: php, js, go
if ( num = Number(num) ){}
здесь идет присвание где результат num =0
услвие if(0) ложно, проваливаемся в else
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Потому что ноль - это ложь в условии.

Ложных значений в JS всего 7 штук: false, null, 0, 0n, "", NaN, undefined.
Это надо просто запомнить.

Конкретно ваше условие:
if ( num = Number(num) ){
можно попробовать заменить на:
if ( (num = Number(num)) || num === 0 ){
Тогда в else пойдёт только в случае ошибки.
Конечно, это далеко не единственный способ и не самый красивый. Но суть ошибки, надеюсь, ясна.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы