Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выводит 'NaN' (https://javascript.ru/forum/misc/50971-vyvodit-%27nan%27.html)

Wixeman 19.10.2014 17:01

Выводит '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 любое арифметическое действие. Подскажите пожалуйста, как исправить код?

Aetae 19.10.2014 17:15

alert(NaN == NaN)
Старый прикол javascript.:)
Использовать следует isNaN().

Erolast 19.10.2014 17:16

+ проверять, наверное, result надо, а не operating?

рони 19.10.2014 17:26

Wixeman,
switch(result) {
    case undefined:
      result = 'ERROR: Calcule is falied!';
      break
    default: if(isNaN(result) ) result = 'ERROR: Answer is not a number!';

  } // switch

Erolast 19.10.2014 17:29

Зачем ветвление городить?
if (isNaN(result))
  result = 'ERROR: Answer is not a number!';
else if(result == undefined)
  result = 'ERROR: Calcule is falied!';

Wixeman 19.10.2014 17:29

Всем большое спасибо за столь быстрые ответы! Вот рабочий код:
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);
};

terminator-101 19.10.2014 22:22

Цитата:

Сообщение от Erolast (Сообщение 336463)
Зачем ветвление городить?
if (isNaN(result))
  result = 'ERROR: Answer is not a number!';
else if(result == undefined)
  result = 'ERROR: Calcule is falied!';

А ты что не ветвление написал?
И зачем ты на undefined отдельно проверяешь? Он что, по-твоему number чтоли? У тебя вобще до проверки на undefined не дойдет. Поменяй местами тогда чтоли свой гребаный стрем, если уж надо на андефайнед проверять.

ruslan_mart 20.10.2014 12:12

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.