javascript - 如何计算数字和数学运算符的数组(或字符串)

标签 javascript jquery arrays string calculator

我正在制作一个计算器并将点击的所有数字和运算符推送/保存到一个数组和一个字符串。

我想知道哪种方法 在这种情况下最好。从输入OR 生成字符串或数组是我想不到的更好方法。

我想计算数组或字符串。该字符串给出了错误的答案,我不知道如何计算数组。演示计算器如下。

$(document).ready(function(){
  var inputArr = [];
  var inputStr = '';
  
  $('span').click(function(){
  $('#input').append($(this).text());
  //push to inputArr
   inputArr.push($(this).text());
  //add to inputStr
   inputStr += $(this).text();
  
  });
  
  //Get result
  $('.equals').click(function(){
    $('#result').text(inputArr);
    $('#result').append("<br/>" + parseInt(inputStr));
  });
  
  $('.clear').click(function(){
   // clear everything
  $('#input').text('');
  inputArr = [];
  inputStr = '';
  
  });
});
span {
  background: #bbb;
  border-radius: 2px;
  margin: 5px;
  padding: .5em;
  cursor: pointer;
}
.equals{
  width: 30%;
  background: #bbb;
  border-radius: 2px;
  margin: 15px;
  padding: .5em;
  cursor: pointer;
  text-align: center;
  font-size: 1.5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>1</span>  <span>2</span>  <span>3</span>  <span>4</span>  <span>5</span> 
<br/>
<br/>

<span>6</span>  <span>7</span>  <span>8</span>  <span>9</span>  <span>0</span> 
<br/><br/>
   

<span>+</span><span>-</span><span>*</span><span>/</span><span class='clear'>clear</span>

<p class="equals"> = </p>

<p id="input"></p>

<p id='result'></p>

我尝试使用 parseInt(inputStr) 但它给出了错误的答案。

最佳答案

此函数采用字符串表达式或创建表达式的字符数组。

function calculate(expression) {
  "strict mode";
  if (Array.isArray(expression))
    expression = expression.join("");
  var allowedChars = "1234567890%^*()-+/. ";
  for (var i = 0; i < expression.length; i++)
    if (allowedChars.indexOf(expression.charAt(i)) < 0)
      throw new Error("Invalid expression: unexpected '" + expression.charAt(i) + "' in '" + expression + "'");
  return eval(expression);
}

try {
  alert(calculate("4+4"));
  alert(calculate([7, "+", 9, "/", 34]));
  alert(calculate("45/3"));
  alert(calculate("100 * cheeseburger"));
} catch (e) {
  alert(e.message);
}

这是安全的原因:

  1. 不正确地使用 eval 会打开您的代码进行注入(inject)攻击
    • strict mode 中,eval 无法将新变量引入周围范围。 (因为它在它自己的功能的末尾,无论如何在该范围内没有发生任何其他事情。)
    • 如果出现任何不属于数学表达式的字符,函数将抛出错误,从而无法进行注入(inject)。
  2. 使用 eval,调试可能更具挑战性(没有行号等)
    • 在这种情况下,函数会抛出一个错误,其中包含一个行号。 eval 的代码只有一行,所以这无关紧要。
  3. eval 的代码执行得更慢(没有机会编译/缓存 eval 的代码)
    • 在这种情况下,没有要编译/缓存的内容,所以这不是问题。

关于javascript - 如何计算数字和数学运算符的数组(或字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40433498/

相关文章:

javascript - 如何在 Kendo Grid 中显示二维码?

javascript - 我将如何使用 jquery 向该脚本添加淡入淡出函数?

c - 将多维数组传递给函数

c - 搜索字符串的程序中出现段错误

java - 如何通过跳转复制数组?

javascript - 为什么我的 Windows 机器上的 chrome 限制脚本中的频率箱数量?

javascript - onmouseover javascript 照片库

javascript - 如何从 jQuery 对象获取特定的 html

jQuery 通过单击 div 外部隐藏

javascript - JavaScript 错误 : object is not a function