2015-10-15 2 views
-2

Я ищу аналогичную функцию javascript, но без использования eval. Я собираюсь создать общую функцию для простых вычислений с тремя входами, двумя числами и знаком. Проблема в том, что без eval знаки плюса преобразуют все в строку, поэтому, если я пишу return val1 + sign + val2, я получаю строку обратно.Я ищу аналогичную функцию JavaScript

var calculate = function(val1, val2, sign) { 
       return eval(val1 + sign + val2); 
    } 
+4

'переключатель знак {случай "+": ... случай "-": ...}' – Andreas

+0

Больше как 'случай "+": знач1 + val2; ломать; case "-": val1 - val2; break'. – Joe

ответ

0

Попробуйте:

var calc = function (a, b, sign) { 
     var usw; 
     switch (sign) { 
      case '-': 
       usw = parseFloat(a) - parseFloat(b); 
       break; 
      case '+': 
       usw = parseFloat(a) + parseFloat(b); 
       break; 
      case '/': 
       usw = parseFloat(a)/parseFloat(b); 
       break; 
      case '*': 
       usw = parseFloat(a) * parseFloat(b); 
       break; 
      default: 
       throw "Input data is invalid"; 
       break; 
     } 

     return usw; 
    } 

console.log(calc('15.2', '54', '*')); 
0

Просто сделать объект с желавшими операторами, испытание, если оператор существует, и использовать его.

var operators = { 
 
     '+': function (a, b) { return a + b; }, 
 
     '-': function (a, b) { return a - b; }, 
 
     '*': function (a, b) { return a * b; }, 
 
     '/': function (a, b) { return a/b; } 
 
    }, 
 
    calculate = function (val1, val2, sign) { 
 
     if (sign in operators) { 
 
      return operators[sign](val1, val2); 
 
     } 
 
    } 
 
document.write(calculate(6, 7, '*'));

Смежные вопросы