Сохранение чисел на JS

Мне нужно для себя создать скрипт, который будет считать и сохранять в localStorage число моих денег. Сижу уже целый день, все сделал как бы правильно, но возвращается NaN. Что не так, помогите. Я новичок в этом деле)
Вот код:

function onDonePressed(){
  if(document.getElementById("cash-count") !== null || document.getElementById("cash-count") !== NaN || document.getElementById("cash-count") !== undefined){
    var input = document.getElementById("cash-input").value;
    var a1 = parseInt(input);

    var cash = document.getElementById("cash-count").value;
    var a2 = parseInt(cash);

    document.getElementById("cash-count").innerHTML = isNaN(a1)+isNaN(a2);
  }else{
    console.log('else');
  }

  document.getElementById("cash-input").value = "";
}

Ответы (1 шт):

Автор решения: OPTIMUS PRIME

все сделал как бы правильно

  • document.getElementById("cash-count") !== null и остальные: getElementById возвращает ссылку на HTML-объект, или null - если такого элемента нет на странице. Сравнение с null означает "если элемент существует". Но ...byId() никак не может быть NaN или undefined.

  • Каждый раз когда вы пишете getElementById, браузер заново ищет этот элемент. Хоть и в случае с id это происходит очень быстро, но есть смысл один раз получить и сохранить его в переменной: Как минимум, чтобы не повторять в коде длинную строчку.

  • isNaN(a1) + isNaN(a2) — isNaN пробует превратить полученный аргумент в число. Если получается, возвращает false, иначе - true. Это то же самое, что написать false + true

  • Перепутали .value, .innerHTML.
    value - у элементов ввода (input, textarea) - дает текущее введенное значение. А innerHTML - то, что содержится внутри парных HTML-тегов. А если записываете туда обычную строку, а не HTML-код, вместо него хорошо бы использовать textContent

Исправленный вариант вашей функции:

function onDonePressed(){
  let cash_count = document.getElementById("cash-count");
  let cash_input = document.getElementById("cash-input");
  
  if(cash_count){
    // Если элемента нет (null) - в логическом контексте это false, условие не выполнится.
    // В этом случае не нужно отдельно писать cash_count !== null

    let total = Number(cash_count.textContent) + Number(cash_input.value);
    // textContent и value - это всегда строки, даже если туда ввели число.
    // "1" + "2" → "12", чтобы их именно суммировать, нужно превратить в числа.

    if ( !isNaN(total) ) cash_count.textContent = total;
    // !false → true, !true → false
    
  } else{
    console.log('else');
  }

  cash_input.value = "";
}

http://learn.javascript.ru/
https://developer.mozilla.org/ru/

→ Ссылка