我正在制作一个带有HTML,CSS和Javascript的计算器,用于练习。我发现“内置”eval函数从字符串中进行了数学运算。但它不能正常工作。
我不知道问题是什么。但是当我做例如:11 + 11/2应该是11.由于某种原因变为16.5。我不知道为什么。我真的很感激一些帮助。
以下是代码:
function revealAnswer(){
var math = document.getElementById("numbersInputted");
math.innerHTML += " = " + eval(math.innerHTML);
}
答案 0 :(得分:1)
为什么这是错误的做法有很多原因。
首先,innerHTML
返回一个字符串,不仅包含元素的文本内容,还包含任何嵌套的HTML元素。如果它只是您想要的文字,请使用textContent
。
接下来,通过让用户输入他们想要在相同字符串中使用的实际数学运算符,数字会产生更多混淆。让用户单独输入,然后您可以使用if/then
逻辑最终使用正确的运算符。
接下来(这是重要部分),不要使用eval()
。不需要解决您可能遇到的任何问题,但它打开了“跨站点脚本”的大门。攻击你的网站。此外,它操纵this
绑定并在其自己的范围内执行其代码。
您真正需要做的只是将字符串输入转换为数字,以便您可以使用它进行数学运算。您可以使用 parseInt()
和 parseFloat()
所以,你的行可能是:
math.innerHTML += " = " + parseFloat(math.textContent);
最后,对于数学,操作的顺序是:
您可以看到除法是在添加之前完成的,这意味着在您的表达式中11 + 11/2
,首先评估11/2
(5.5),然后将其添加到11
( 16.5)。
最后,请记住JavaScript中的+
运算符可能意味着数学加法或字符串连接,如果其中一个操作数是字符串,则另一个将转换为字符串。