Сохранение чисел на 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 шт):
все сделал как бы правильно
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/