Преобразувайте низ в израз в 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
Първо, твърдението, че може да включва дървета, всъщност не е намек и второ, дори не се нуждае от дървета. OP трябва да знае, че трябва да преобразува тази нотация infix в postfix и след това да използва алгоритъм за оценка на 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