Выводит '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, время: 20:16. |