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)
您可能已经注意到,树的设计方式使其符合运算符优先级.在/具有比一个较低的水平+,这意味着它获得的第一个评价.
无论你如何详细地做到这一点,基本上就是这样.
| 归档时间: |
|
| 查看次数: |
2204 次 |
| 最近记录: |