1 javascript math eval calculator
这段代码用作计算器,但是codeacademy的便笺告诉我,eval是邪恶的.有没有另一种方法可以在不使用eval的情况下做同样的事情?
var calculate = prompt("Enter problem");
alert(eval(calculate));
Run Code Online (Sandbox Code Playgroud)
eval
将字符串输入评估为JavaScript,巧合的是JavaScript支持计算和理解1+1
,这使其适合作为计算器.
如果你不想使用eval
,这是好的,你必须自己解析该字符串,最后,自己做计算(虽然不是你自己).看看这个数学处理器,它可以满足您的需求.
基本上你做的是:
例如,您"1+2/3"
可以评估以下数据结构:
"+"
/ \
"1" "/"
/ \
"2" "3"
Run Code Online (Sandbox Code Playgroud)
然后,您可以从上到下遍历该结构并进行计算.起初你已经得到了"+"
,左边有一个,右边有一些表达,所以你必须先评估那个表达式.所以你去了"/"
节点,它有两个数字子节点.知道了,你现在可以用它的结果来计算2/3
和替换整个"/"
节点.现在你可以再次上升并计算" +
"节点的结果:1 + 0.66
.现在用结果替换该节点,剩下的就是表达式的结果.
关于代码如何看起来的一些伪代码:
calculation(operator, leftValue, rightValue):
switch operator {
case '+': return leftValue + rightValue
case '-': return 42
}
action(node):
node.value = calculation(node.operator, action(node.left) action(node.right))
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到,树的设计方式使其符合运算符优先级.在/
具有比一个较低的水平+
,这意味着它获得的第一个评价.
无论你如何详细地做到这一点,基本上就是这样.