Обьяснить кусок кода, почему он работает хотя по идее не должен

270
12 декабря 2018, 12:00

Сделал мини аналог самого просто калькулятора, и проблема в кнопке "."(demicial), а точнее в ее функции нажатия demicialPress(), дело в том что там есть кусок кода

if (MemoryNewNumber) {
      localMemoryCurrentNumber = '0.';
      MemoryNewNumber = false;
}

и вот когда я нажимаю эту кнопку она работает, хотя MemoryNewNumber по умолчанию false, те кто знает почему так, не могли бы вы мне объяснить в чем дело.

window.onload = function() { 
  var numbers = document.querySelectorAll('.btn-number'), 
    operations = document.querySelectorAll('.btn-operation'), 
    clears = document.querySelectorAll('.btn-clear'), 
    display = document.getElementById('display'), 
    decimal = document.getElementById('btn-decimal'), 
    MemoryCurrentNumber = 0, 
    MemoryNewNumber = false, 
    MemoryPandingOperation = ''; 
 
  function searchCurrentElem(variable, funName) { 
    for (var i = 0; i < variable.length; i++) { 
      var CurrentElem = variable[i]; 
      CurrentElem.addEventListener('click', function(e) { 
        funName(e.target.textContent); 
      }); 
    }; 
  }; 
  searchCurrentElem(numbers, numberPress); 
  searchCurrentElem(clears, clearPress); 
  searchCurrentElem(operations, operationPress); 
  decimal.addEventListener('click', decimalPress); 
 
  function decimalPress(cell) { 
    var localDecimalMemory = display.value; 
    if (MemoryNewNumber) { 
      localDecimalMemory = '0.'; 
      MemoryNewNumber = false; 
    } else { 
      if (localDecimalMemory.indexOf('.') === -1) { 
        localDecimalMemory += '.'; 
      }; 
      display.value = localDecimalMemory; 
    }; 
  }; 
 
  function numberPress(symbol) { 
    if (MemoryNewNumber) { 
      display.value = symbol; 
      MemoryNewNumber = false; 
    } else { 
      if (display.value === '0') { 
        display.value = symbol; 
      } else { 
        display.value += symbol; 
      }; 
    }; 
  }; 
 
  function operationPress(op) { 
    var localOperationMemory = display.value; 
    if (MemoryNewNumber && MemoryPandingOperation !== '=') { 
      display.value = MemoryCurrentNumber; 
    } else { 
      MemoryNewNumber = true; 
      if (MemoryPandingOperation === '+') { 
        MemoryCurrentNumber += parseFloat(localOperationMemory); 
      } else if (MemoryPandingOperation === '-') { 
        MemoryCurrentNumber -= parseFloat(localOperationMemory); 
      } else if (MemoryPandingOperation === '/') { 
        MemoryCurrentNumber /= parseFloat(localOperationMemory); 
      } else if (MemoryPandingOperation === '*') { 
        MemoryCurrentNumber *= parseFloat(localOperationMemory); 
      } else { 
        MemoryCurrentNumber = parseFloat(localOperationMemory); 
      }; 
      display.value = MemoryCurrentNumber; 
      MemoryPandingOperation = op; 
    }; 
  }; 
 
  function clearPress(btnClear) { 
    if (btnClear == 'ce') { 
      display.value = '0'; 
    } else if (btnClear == 'c') { 
      display.value = '0'; 
      MemoryCurrentNumber = 0; 
      MemoryPandingOperation = ''; 
    }; 
  }; 
 
 
};
#calc { 
  position: absolute; 
  top: 50%; 
  left: 50%; 
  transform: translate(-50%, -50%); 
  width: 500px; 
  height: 700px; 
  background-color: pink; 
  border-radius: 20px; 
  padding: 20px; 
  display: grid; 
  grid-template-rows: 0.7fr 1fr; 
  grid-row-gap: 20px; 
} 
 
#display { 
  width: 100%; 
  height: 100%; 
  border: none; 
  outline: none; 
  background-color: white; 
  color: black; 
  border-top-left-radius: 10px; 
  border-top-right-radius: 10px; 
  font-size: 70px; 
  display: flex; 
  text-align: right; 
  padding-left: 20px; 
  padding-right: 20px; 
} 
 
#calc_display { 
  width: 100%; 
  height: 100%; 
  display: flex; 
  justify-content: center; 
  align-items: center; 
} 
 
#calc__clock-face { 
  display: inherit; 
  grid-template-columns: 1fr 1fr 1fr 1fr; 
  grid-template-rows: 1fr 1fr 1fr 1fr 1fr; 
  grid-column-gap: 5px; 
  grid-row-gap: 5px; 
} 
 
.calc__btn { 
  border: none; 
  outline: none; 
  background-color: #fff; 
  color: #000; 
  font-size: 25px; 
  font-weight: 500; 
  display: flex; 
  justify-content: center; 
  align-items: center; 
  text-align: center; 
  text-transform: uppercase; 
  transition: 0.3s; 
} 
 
.btn-operation:hover { 
  background-color: skyblue; 
} 
 
.btn-clear:hover { 
  background-color: goldenrod; 
} 
 
.btn-number:hover { 
  background-color: darkgrey; 
} 
 
#btn-decimal:hover { 
  background-color: greenyellow; 
} 
 
.calc__btn:nth-of-type(10) { 
  grid-row-start: 5; 
  grid-row-end: 6; 
  grid-column-start: 1; 
  grid-column-end: 3; 
  border-bottom-left-radius: 10px; 
} 
 
.calc__btn:nth-of-type(11) { 
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 1; 
  grid-column-end: 2; 
} 
 
.calc__btn:nth-of-type(12) { 
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 2; 
  grid-column-end: 3; 
} 
 
.calc__btn:nth-of-type(13) { 
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 4; 
  grid-column-end: 5; 
} 
 
.calc__btn:nth-of-type(14) { 
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 3; 
  grid-column-end: 4; 
} 
 
.calc__btn:nth-of-type(15) { 
  grid-row-start: 2; 
  grid-row-end: 3; 
  grid-column-start: 4; 
  grid-column-end: 5; 
} 
 
.calc__btn:nth-of-type(16) { 
  grid-row-start: 3; 
  grid-row-end: 4; 
  grid-column-start: 4; 
  grid-column-end: 5; 
} 
 
.calc__btn:nth-of-type(17) { 
  grid-row-start: 4; 
  grid-row-end: 6; 
  grid-column-start: 4; 
  grid-column-end: 5; 
  border-bottom-right-radius: 10px; 
} 
 
.calc__btn:nth-of-type(17):hover { 
  background-color: red; 
}
<div id="calc"> 
  <div id="calc_display"> 
    <input id="display" type="text" name="display" placeholder="0000000000" disabled value="0"> 
  </div> 
  <div id="calc__clock-face"> 
    <button class="calc__btn btn-number">1</button> 
    <button class="calc__btn btn btn-number">2</button> 
    <button class="calc__btn btn-number">3</button> 
    <button class="calc__btn btn-number">4</button> 
    <button class="calc__btn btn-number">5</button> 
    <button class="calc__btn btn-number">6</button> 
    <button class="calc__btn btn-number">7</button> 
    <button class="calc__btn btn-number">8</button> 
    <button class="calc__btn btn-number">9</button> 
    <button class="calc__btn btn-number">0</button> 
    <button class="calc__btn btn-clear" id="ce">ce</button> 
    <button class="calc__btn btn-clear" id="c">c</button> 
    <button class="calc__btn btn-operation">*</button> 
    <button class="calc__btn btn-operation">/</button> 
    <button class="calc__btn btn-operation">+</button> 
    <button class="calc__btn btn-operation">-</button> 
    <button class="calc__btn btn-operation">=</button> 
    <button class="calc__btn" id="btn-decimal">.</button> 
  </div> 
</div>

Также прилагаю ссылку на CodePen С готовым cacl https://codepen.io/Kraken_boon/pen/jvWxBZ

Answer 1

Вы же в else добавляете точку к текущему значению, если ее там нет.

} else {
  if (localDecimalMemory.indexOf('.') === -1) {
    localDecimalMemory += '.';
  };
  display.value = localDecimalMemory;
}
READ ALSO
Помогите написать правильно скрипт [закрыт]

Помогите написать правильно скрипт [закрыт]

Сутьформа,сначала выпадающий список(юр лица,физ лица)в зависимости от выбора, ниже появляются соответствующие выбору поля(физ

146
Функциональное наследование JS. Передача значения свойства потомкам

Функциональное наследование JS. Передача значения свойства потомкам

Вопрос, как передать значение свойства потомкам? В качестве примера, мне нужно чтобы все потомки сохранили контекст, однако это не сводится...

147
Как удалить данные с API по URL+ID Angularjs

Как удалить данные с API по URL+ID Angularjs

Проблема - нужно удалить комментарий с текущим ID по клику на DeleteНе могу связать ID комментария и функцию удаления

156