Javascript eval() 函数无法正常工作

Javascript eval() function not working properly

我目前正在用 HTML、CSS 和 Javascript 制作一个计算器以供练习。我发现 "built in" eval 函数对字符串进行了数学运算。但它不能正常工作。

我不知道是什么问题。但是,例如,当我这样做时:11+11/2 应该是 11。由于某种原因变成 16.5。我不知道为什么。我真的很感激一些帮助。

代码如下:

    function revealAnswer(){
            var math = document.getElementById("numbersInputted");
            math.innerHTML += " = " + eval(math.innerHTML);

    }

这是错误方法的原因有很多。

首先,innerHTML returns 一个字符串,不仅包含元素的文本内容,还包含任何嵌套的 HTML 元素。如果只是您想要的文本,请使用 textContent.

接下来,通过让用户在与数字相同的字符串中输入他们想要使用的实际数学运算符会造成更多混乱。让用户单独输入,然后您可以使用 if/then 逻辑最终使用正确的运算符。

下一步(这是重要的部分),永远不要使用 eval()。它不需要解决您可能遇到的任何问题,但它为您的网站 "Cross Site Scripting" 攻击打开了大门。此外,它还操纵 this 绑定并在其自己的范围内执行其代码。

您真正需要做的只是将输入的字符串转换为数字,以便您可以用它进行数学运算。您可以使用 parseInt() and parseFloat()

因此,您的台词可能是:

math.innerHTML += " = " + parseFloat(math.textContent);

最后,对于数学,运算顺序是:

  • 括号
  • 指数
  • 乘法
  • 加法
  • 减法

您可以看到除法在加法之前完成,这意味着在您的表达式中:11 + 11/2,首先计算 11/2 (5.5),然后将其添加到 11 (16.5).

最后,请记住 JavaScript 中的 + 运算符可以表示数学加法或字符串连接,如果其中一个操作数是字符串,则另一个将转换为字符串。