Выводит 'NaN'
Здравствуйте! Скрипт запускается при нажатии на кнопку в HTML. Там все хорошо. Вот скрипт JS:
function calculation() { var firstNum = prompt('Enter first number: '), secondNum = prompt('Enter second number: '), operating = prompt('Enter operating with number: '), result; // string to number var nFirstNum = (+firstNum / 1), nSecondNum = (+secondNum / 1); switch(operating) { case '+': result = (nFirstNum + nSecondNum); break case '-': result = (nFirstNum - nSecondNum); break case '*': result = (nFirstNum * nSecondNum); break case '/': result = (nFirstNum / nSecondNum); break case '': result = 'ERROR: Values are empty!'; break case undefined: result = 'ERROR: Calcule is falied!'; console.log('ERROR: Result is undefined!'); break case NaN: result = 'ERROR: Answer is not a number!'; console.log('ERROR: Result is Nan!'); break default: result = 'ERROR: Operating is not correct!'; console.log('ERROR: Operating is not correct!'); } // switch alert(result); }; При значении result равным NaN, скрипт должен выводить 'ERROR: Answer is not a number!'. Но он все-равно выводит NaN. Проверить это можно, введя в nFirstNum и nSecondNum строку, а в operating любое арифметическое действие. Подскажите пожалуйста, как исправить код? |
alert(NaN == NaN)Старый прикол javascript.:) Использовать следует isNaN(). |
+ проверять, наверное, result надо, а не operating?
|
Wixeman,
switch(result) { case undefined: result = 'ERROR: Calcule is falied!'; break default: if(isNaN(result) ) result = 'ERROR: Answer is not a number!'; } // switch |
Зачем ветвление городить?
if (isNaN(result)) result = 'ERROR: Answer is not a number!'; else if(result == undefined) result = 'ERROR: Calcule is falied!'; |
Всем большое спасибо за столь быстрые ответы! Вот рабочий код:
function calculation() { var firstNum = prompt('Enter first number: '), secondNum = prompt('Enter second number: '), operating = prompt('Enter operating with number: '), result; // string to number var nFirstNum = (+firstNum / 1), nSecondNum = (+secondNum / 1); switch(operating) { case '+': result = (nFirstNum + nSecondNum); break case '-': result = (nFirstNum - nSecondNum); break case '*': result = (nFirstNum * nSecondNum); break case '/': result = (nFirstNum / nSecondNum); break case '': result = 'ERROR: Values are empty!'; console.log('ERROR: Values are undefined!'); break default: result = 'ERROR: Operating is not correct!'; console.log('ERROR: Operating is not correct!'); } // switch switch(result) { case undefined: result = 'ERROR: Calcule is falied!'; console.log('ERROR: Result is undefined!'); break default: if(isNaN(result)) result = 'ERROR: Answer is not a number!'; } alert(result); }; |
Цитата:
И зачем ты на undefined отдельно проверяешь? Он что, по-твоему number чтоли? У тебя вобще до проверки на undefined не дойдет. Поменяй местами тогда чтоли свой гребаный стрем, если уж надо на андефайнед проверять. |
function calculation() { var firstNum = prompt('Enter first number:'), secondNum = prompt('Enter second number:'), operating = prompt('Enter operating with number:'), result = /[+*\/-]/.test(operating) ? eval(+firstNum + operating + +secondNum) : 'ERROR: ' + {'': 'Values are empty!', NaN: 'Answer is not a number!'}[operating] || 'Calcule is falied!'; alert(result); }; calculation(); :lol: |
Часовой пояс GMT +3, время: 08:33. |