计算器:字符串转换为数学运算(JavaScript)

计算器:字符串转换为数学运算(JavaScript),javascript,html,Javascript,Html,如何将字符串转换为数学运算?我不能用eval。有什么建议吗? 这就是我目前所拥有的。我将字符串拆分为一个数组,但如何将“=”、“-”等转换为实际的数学运算。此外,我知道我可以使用parseInt将“number”转换为实际的数字,但代码中会如何显示?不知道怎么开始 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.or

如何将字符串转换为数学运算?我不能用eval。有什么建议吗? 这就是我目前所拥有的。我将字符串拆分为一个数组,但如何将“=”、“-”等转换为实际的数学运算。此外,我知道我可以使用parseInt将“number”转换为实际的数字,但代码中会如何显示?不知道怎么开始

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <title>JavaScript HW3</title>
    <script type="text/javascript">
      function display(num) {
        var node = document.getElementById("display");  
        node.value+=num;    
      }

      function result(){
        document.getElementById("display").value = (document.getElementById("display").value).split("");
      }
    </script>
  </head>
  <body> 
    <h1>Simple calculator</h1>


    <form action="" method="get">
      <p>
        <input type="text" id="display"/>       
      </p>
    </form>

    <form action=""  method="get">
      <div class="button">
        <input type="button" class="btn" name="b7" value="7" onclick='display("7")'/>
        <input type="button" class="btn" name="b8" value="8" onclick='display("8")'/>
        <input type="button" class="btn" name="b9" value="9" onclick='display("9")'/>
        <input type="button" class="btn" name="db" value="/" onclick='display("/")'/>
        <br/>
        <input type="button" class="btn" name="b4" value="6" onclick='display("6")'/>
        <input type="button" class="btn" name="b5" value="5" onclick='display("5")'/>
        <input type="button" class="btn" name="b6" value="4" onclick='display("4")'/>
        <input type="button" class="btn" name="mb" value="*" onclick='display("*")'/>
        <br/>    
        <input type="button" class="btn" name="b1" value="3" onclick='display("3")'/>
        <input type="button" class="btn" name="b2" value="2" onclick='display("2")'/>
        <input type="button" class="btn" name="b3" value="1" onclick='display("1")'/>
        <input type="button" class="btn" name="mib" value="-" onclick='display("-")'/>
        <br></br>

        <input type="button" class="btn" name="db" value="." onclick='display(".")'/>
        <input type="button" class="btn" name="b0" value="0" onclick='display("0")'/>
        <input type="button" class="btn" name="eb" value="=" onclick='result("")'/>
        <input type="button" class="btn" name="ab" value="+" onclick='display("+")'/>
        <br/>
      </div>
    </form>

    <!-- W3C XHTML Validation logo-->
    <p>
      <a href="http://validator.w3.org/check?uri=referer"><img
        src="http://www.w3.org/Icons/valid-xhtml11"
        alt="Valid XHTML 1.1" height="31" width="88" /></a>
    </p>
  </body>
</html>

JavaScript HW3
功能显示(num){
var节点=document.getElementById(“显示”);
node.value+=num;
}
函数结果(){
document.getElementById(“display”).value=(document.getElementById(“display”).value).拆分(“”);
}
简易计算器







我不想写全部内容,但有一个方向你可以走。可以将字符串转换为以字符串为键、函数为值的对象的操作。考虑一个这样的对象:

var操作={
电流:0,
“=”:函数(){
将此文件返回到当前文件
},
“+”:函数(n){
当前电流+=数字(n)
还这个
}
}
操作['+'](100)
操作['+'](50)
var total=操作['=']()

log(“total:,total)
您可以使用类似的方法,在您的情况下,当用户按下
=
按钮时,您从计算器中获取字符串并调用
calculateString

不支持方括号/括号
()

函数计算器字符串(str){
var valArr=str.split(/\s[+-/*]\s/),//在每个运算符上拆分字符串(两边各有一个空格,允许使用负值)
opArr=str.match(//\s[+-/*]\s/g);//返回字符串中的所有运算符

对于(var i=0,len=valArr.length;i
这就是我目前所拥有的。我将字符串分割成一个数组
——这是一个好的开始……现在,您认为接下来需要做什么?尝试使用
if
语句,例如
if(part==“-”{answer prevPart-nextPart;}
。希望这足以让您继续前进。如果您不想重新发明方向盘,此npm软件包将派上用场:
function calculateString(str){
    var valArr = str.split(/\s[+-/*]\s/),//split string on each operator (having a space either side allowing for a negative value)
        opArr = str.match(/\s[+-/*]\s/g);//return all operators from string

    for(var i=0,len=valArr.length;i<len;i++){
        //convert each value to a number instead of string
        valArr[i] = +valArr[i];
    }
    for(var i=0,len=opArr.length;i<len;i++){
        //cleanup whitespace from operators
        opArr[i] = opArr[i].trim();
    }

    var currentTotal = valArr[0];
    for(var i=0,len=opArr.length;i<len;i++){
        switch(opArr[i]){
            case '+':
                currentTotal = currentTotal + valArr[i+1];
                break;
            case '-':
                currentTotal = currentTotal - valArr[i+1];
                break;
            case '*':
                currentTotal = currentTotal * valArr[i+1];
                break;
            case '/':
                currentTotal = currentTotal / valArr[i+1];
                break;
        }
    }
    return currentTotal;
}