Преобразование строки в выражение в JavaScript

Я делаю калькулятор на JavaScript и хочу знать, как превратить строку в выражение.

var numbers = "5+5+6";
numbers = +numbers;
 document.querySelector('.screen').innerHTML = numbers;

Добавление + перед переменной не работает. Буду признателен, если кто-то помог.


person Joe Clark    schedule 20.10.2015    source источник
comment
используйте функцию eval()   -  person Typo    schedule 21.10.2015
comment
Eval — это то, что вам нужно, но вы должны знать, что его использование обычно осуждается. stackoverflow.com/questions/86513/   -  person Matt R    schedule 21.10.2015


Ответы (3)


Вы можете использовать функцию eval() следующим образом:

var numbers = "5+5+6";
document.querySelector('.screen').innerHTML = eval(numbers);;

Оценить/выполнить код/выражения JavaScript:

var x = 10;
var y = 20;
var a = eval("x * y") + "<br>";
var b = eval("2 + 2") + "<br>";
var c = eval("x + 17") + "<br>";

var res = a + b + c;

Результатом res будет:

200
4
27
person Typo    schedule 20.10.2015

Без использования eval, который является читерством, вы всегда можете написать простое приложение-калькулятор.

Во-первых, воспользуйтесь String.split() следующим образом.

var numbers = "5+5+6";

numbers.split("");
// => ["5","+","5","+","6"]

Теперь все, что вам нужно сделать, это выяснить, как оценить его, сохраняя при этом правильный порядок операций. Подсказка: это могут быть деревья.

person Jonah Williams    schedule 20.10.2015
comment
Во-первых, сказать, что он может включать деревья, на самом деле не намек, а во-вторых, он даже не нуждается в деревьях. ОП должен знать, что ему нужно преобразовать эту нотацию infix в postfix, а затем использовать алгоритм постфиксной оценки для выполнения вычислений. - person nem035; 21.10.2015

Попробуйте использовать String.prototype.match() , Array.prototype.reduce() , Number() . См. также Приложение Chrome: математические вычисления из строки

var numbers = "5+5+6";
var number = numbers.match(/\d+|\+\d+|\-\d+/g)
  .reduce(function(a, b) {
    return Number(a) + Number(b)
  });
document.querySelector(".screen").innerHTML = number;
<div class="screen"></div>

person guest271314    schedule 20.10.2015