如何用字符串创建数学方程式?

时间:2013-11-25 22:10:42

标签: javascript

假设我有以下变量(它们都是字符串):

x = "4"
op1 = "+"
y = "5"
op2 = "-"
z = "3"

我如何使用这些字符串并制作一个可以给出答案6的等式?

3 个答案:

答案 0 :(得分:1)

你能做到的一个简单方法是使用邪恶的eval,类似于:

var result = eval(x + op1 + y + op2 + z);

这将使用result填充6


DEMO - 使用邪恶的eval


eval()非常适合以字符串格式评估方程式。 当eval()执行传递的字符串中的任何内容时,您应该先检查/清除数据,然后再在其上运行eval(),特别是在面向公众的应用程序中。

在使用eval之前,看看this SO post关于如何检查字符串是否安全的示例,假设这是您在应用中需要担心的事情。


eval()

的替代品

虽然正确使用eval()并且管理得当并不是最糟糕的事情non-eval()替代方案会很棒。

如果您查看Shryme's自己answer上的评论,可以概述一种有趣的方式。评论的有趣部分是myOperator.execute(number1, number2);


为什么eval邪恶?


eval()不是那么特别,并且是危险的或同样的原因,任何其他高级语言功能在不被理解和错过使用时都是危险的。

eval()是在运行时评估代码的最常用方法 请注意,它在调用它的作用域中的字符串中执行代码。 它会盲目地执行任何恶意代码!

eval()返回上次计算的表达式的结果。因此,如果您执行多个表达式,则仅返回最后一个表达式的结果。

eval()可能是最常用的捷径,并且当涉及到范围问题或结果时,大多数小时的调试都会导致错误使用时不正常。

答案 1 :(得分:0)

那么,4 + 5 - 3会给你答案6.要将字符串用于等式,我相信你可以做x + op1 + y + op2 + z吗?确保它是string

类型

答案 2 :(得分:0)

你可以制作一个带2个数字和1个操作符的功能,用操作员在里面做一个开关,做数学然后返回结果,然后用结果调用功能,你的第三个数字和第二个操作符和你得到你的答案