@boluchevskii

Зачем нужно писать дважды eval()?

Нужно сделать обычный калькулятор.
Не понимаю, почему в конце пишем:
.......................... = eval(num);
А потом снова num = eval(num);
Понимаю, что иначе не работает, но логику понять не могу. Подскажите, пожалуйста

<div id="js" class="box">

    <input type="text" class="display" disabled />

    <div class="break"></div>

    <div class="square" onclick="CLICK(this)">7</div>
    <div class="square" onclick="CLICK(this)">8</div>
    <div class="square" onclick="CLICK(this)">9</div>
    <div class="square" onclick="CLICK(this)">*</div>

    <div class="break"></div>

    <div class="square" onclick="CLICK(this)">4</div>
    <div class="square" onclick="CLICK(this)">5</div>
    <div class="square" onclick="CLICK(this)">6</div>
    <div class="square" onclick="CLICK(this)">/</div>

    <div class="break"></div>

    <div class="square" onclick="CLICK(this)">1</div>
    <div class="square" onclick="CLICK(this)">2</div>
    <div class="square" onclick="CLICK(this)">3</div>
    <div class="square" onclick="CLICK(this)">+</div>

    <div class="break"></div>

    <div class="square long" onclick="CLICK(this)">0</div>
    <div class="square" onclick="Calc()">=</div>
    <div class="square" onclick="CLICK(this)">-</div>

  </div>


let num = ""; 

    function CLICK(chislo) {
      num += chislo.textContent;
      document.querySelector('.display').value = num;
    }

    function Calc() {
      document.querySelector(".display").value = eval(num); 
      num = eval(num); // вот здесь
    }
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
@iljaGolubev
Может так станет понятнее?
function Calc() {
      document.querySelector(".display").value = eval(num); 
      num = document.querySelector(".display").value // вот здесь
    }
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Можно и не писать два раза
function Calc() {
      num = eval(num); // записать сразу в переменную
      document.querySelector(".display").value = num;  // затем вывести на дисплей
    }


А по хорошему, eval вообще не стоит писать, ни разу.
И onclick="CLICK(this)" повторять 12 раз тоже не надо.

Вот например без кучи онкликов


Но в любом случае, эта поделка с eval-ом не калькулятор, а пародия.
Введите например 1++2 - и посчитайте - получите ошибку.
Или посчитайте например 1/0 - получите Infinity, затем добавьте любую цифру, опять равно, и снова упадет в ошибку.

Можно куонечно добавить несколько проверок поверх этого eval-а, но гораздо лучшего резултата можно добиться написав нормальную логику. Там кода всего несколько десятков строк. И скорее всего ваше задание и предполагало смотстоятельное ее написание.

Если самостоятельно сложно написать логику кажется непосильной задачей - возьмите тогда готовую библиотеку. Это будет намного лучше, чем пародия с eval-ом.

P.S.: модераторы, вы когда переносите втихаря ответ в комментарии, а в это время его дополняю, то после нажатия "сохранить" все что я набрал исчезает вообще вникуда. Юзабилити - агонь.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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