Javascript将字符串转换为等式

Javascript将字符串转换为等式,javascript,string,Javascript,String,我正在努力学习Javascript,但我遇到了一个问题。我有一个文本输入字段,人们可以在其中输入一个数学方程,然后得到答案。问题是它总是返回等式,而不是答案。那么如何将字符串转换为数学表达式呢 假设您已经有了一个字符串中的方程式,您可以执行以下操作之一: 1使用Eval 这是一个函数,它将接受一个字符串并像运行普通JavaScript一样运行它 即 将在控制台中生成“this is from a string:O” 虽然这很简单,但不值得推荐,因为它可以让任何用户在页面上输入他们想要的任何代码

我正在努力学习Javascript,但我遇到了一个问题。我有一个文本输入字段,人们可以在其中输入一个数学方程,然后得到答案。问题是它总是返回等式,而不是答案。那么如何将字符串转换为数学表达式呢

假设您已经有了一个字符串中的方程式,您可以执行以下操作之一:

1使用Eval

这是一个函数,它将接受一个字符串并像运行普通JavaScript一样运行它

将在控制台中生成“this is from a string:O”

虽然这很简单,但不值得推荐,因为它可以让任何用户在页面上输入他们想要的任何代码

2分离并分析您的输入

可能更好的方法是为方程的不同部分添加额外的输入框

例如,如果总和为1+1,则每个字符将输入到不同的文本框中,数字的每个字符串将使用
parseFloat(“1”)进行计算
parseInt(“1”)将从字符串转换为数字,具体取决于您需要的类型

3从一个字符串中分离出来

如果您希望只有一个文本框,那么我的建议是使用
.split()将输入字符串分隔成一个子字符串数组函数

下面是一个示例,说明如何进行此操作,然后处理结果

function calculateEquation(input) {

// Assume input is 1 + 1

// splits strings into an array of subStrings based on the value given
// in this case it is split everytime there is a space
let subStrings = input.split(" ");
let l = parseFloat(subStrings[0]); // convert values on the left and right into numbers
let r = parseFloat(subStrings[2]);
let sum = 0;

switch (subStrings[1]) {
    case "+": sum = l + r; break;
    case "-": sum = l - r; break;
    case "*": sum = l * r; break;
    case "/": sum = l / r; break;
}

return sum;

}

如果您的网页中有一个输入字段,您可以通过多种方式访问它的内容。例如:

<body>
    <input type="text" id="myText" value="Write the equatation here...">
    <button onclick="myFunction()">Try it</button>
    <p id="demo"></p>
    <script>
        function myFunction() {
            var dangerousInput = document.getElementById("myText").value;
            document.getElementById("demo").innerHTML = eval(dangerousInput);
        }
    </script>
</body>
但千万不要这样使用eval()!

你应该把用户输入当作有害代码,这样你就可以在评估之前考虑一些解析。 引用自:

eval()是一个危险的函数,它执行传递的代码 以调用方的权限。如果使用字符串运行eval() 这可能会受到恶意方的影响,您最终可能会运行 用户计算机上具有您的权限的恶意代码 网页/分机。更重要的是,第三方代码可以看到 调用eval()的作用域,这可能导致可能的攻击 以类似功能不易受影响的方式


使用
eval()
函数。无论你做什么,都不要使用
eval
。没有你的代码,你怎么能指望别人知道你的代码哪里错了?@Kinduser
eval()
可能不安全,因为它也会执行字符串中的任何代码。这很快也很简单,但是对于需要安全性的应用程序,可能应该使用自定义函数(或者从传递到eval的字符串中去掉任何javascript的函数)。@Kinduser:不要在这里教坏习惯,即使是为了学习。人们可能没有意识到这只是为了学习。
<body>
    <input type="text" id="myText" value="Write the equatation here...">
    <button onclick="myFunction()">Try it</button>
    <p id="demo"></p>
    <script>
        function myFunction() {
            var dangerousInput = document.getElementById("myText").value;
            document.getElementById("demo").innerHTML = eval(dangerousInput);
        }
    </script>
</body>
var dangerousInput = new String(document.getElementById("myText").value);
document.getElementById("demo").innerHTML = eval(dangerousInput.toString());