Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.10.2014, 17:01
Новичок на форуме
Отправить личное сообщение для Wixeman Посмотреть профиль Найти все сообщения от Wixeman
 
Регистрация: 19.10.2014
Сообщений: 2

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

Последний раз редактировалось Wixeman, 19.10.2014 в 17:18.
Ответить с цитированием
  #2 (permalink)  
Старый 19.10.2014, 17:15
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

alert(NaN == NaN)
Старый прикол javascript.
Использовать следует isNaN().
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 19.10.2014, 17:16
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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

Последний раз редактировалось Erolast, 19.10.2014 в 17:18.
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2014, 17:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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

  } // switch
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2014, 17:29
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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

Последний раз редактировалось Erolast, 19.10.2014 в 17:34.
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2014, 17:29
Новичок на форуме
Отправить личное сообщение для Wixeman Посмотреть профиль Найти все сообщения от Wixeman
 
Регистрация: 19.10.2014
Сообщений: 2

Всем большое спасибо за столь быстрые ответы! Вот рабочий код:
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);
};
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2014, 22:22
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Сообщение от Erolast Посмотреть сообщение
Зачем ветвление городить?
if (isNaN(result))
  result = 'ERROR: Answer is not a number!';
else if(result == undefined)
  result = 'ERROR: Calcule is falied!';
А ты что не ветвление написал?
И зачем ты на undefined отдельно проверяешь? Он что, по-твоему number чтоли? У тебя вобще до проверки на undefined не дойдет. Поменяй местами тогда чтоли свой гребаный стрем, если уж надо на андефайнед проверять.

Последний раз редактировалось terminator-101, 19.10.2014 в 22:38.
Ответить с цитированием
  #8 (permalink)  
Старый 20.10.2014, 12:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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();



Последний раз редактировалось ruslan_mart, 20.10.2014 в 12:17.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
<noscript> ничего не выводит при отключенном javascript в браузере freerun888 Общие вопросы Javascript 15 07.09.2015 17:03
В Chrome жму "Назад", в место страницы выводит выводит json frost18 AJAX и COMET 6 12.08.2014 11:10
Почему оператор ++ генерирует искючение, а не NaN в случае со строкой? dump Общие вопросы Javascript 23 16.07.2012 22:44
Как узнать html-код который выводит js? leny Элементы интерфейса 13 18.12.2011 22:06
Опыты с NaN. В чём прикол. ILL-JAH Общие вопросы Javascript 10 05.04.2011 20:58