【问题标题】:why eval() is not evaluating two values in javascript [closed]为什么eval()不评估javascript中的两个值[关闭]
【发布时间】:2021-07-13 13:29:42
【问题描述】:

我是编码新手,参加过几次训练营,现在尝试用 javascript 制作计算器。 当我在单击 = 时尝试评估 2 个值时会出现问题。请老师指导我。 我尝试了一些解决方法,但它们没有工作,观看了一些 youtube 视频,但感觉就像我在我的项目中复制粘贴了一些其他代码,所以为了改进我需要自己做一些事情,或者至少知道问题出在哪里。

var buttons = document.querySelectorAll('button')
var result = document.getElementById('screen')


function number() {
  for (num of buttons) {
    num.addEventListener('click', (e) => {
      buttonText = e.target.innerText
      console.log(buttonText)
      result.value += buttonText

      if (buttonText === '=') {
        result.value = eval('result.value')

      } else if (buttonText === 'x') {
        buttonText = '*'

      } else if (buttonText === 'C') {
        result.value = ''

      }

    })

  }
}
number()
body {
  font-family: 'sans-serif', Tahoma, Geneva, Verdana;
}

.container {
  text-align: center;
}

input {
  font-size: 1.3rem;
  margin-bottom: .5rem;
  padding: .2rem;
  text-align: right;
}

input:focus {
  border: none;
}

table {
  margin: auto;
}

button {
  width: 3.38rem;
  height: 2rem;
  border: none;
  font-size: 16px;
  cursor: pointer;
  background-color: aliceblue;
}

button:hover {
  background-color: #d4c2c2;
}

td:hover {
  background-color: #d4c2c2;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Calculator</title>
  <link rel="stylesheet" href="style.css" />
  <script src="https://kit.fontawesome.com/c77dc29510.js" crossorigin="anonymous"></script>
</head>

<body>
  <div class="container">
    <h1>Calculator</h1>

    <input type="text" value="" id="screen" />

    <table>
      <tr>
        <td colspan="2" style="background-color: aliceblue;"><button> <i class="fas fa-backspace"</i> </button></td>
        <td><button>C</button></td>
        <td><button>%</button></td>
      </tr>
      <tr>
        <td><button>7</button></td>
        <td><button>8</button></td>
        <td><button>9</button></td>
        <td><button>x</button></td>
      </tr>
      <tr>
        <td><button>4</button></td>
        <td><button>5</button></td>
        <td><button>6</button></td>
        <td><button>-</button></td>
      </tr>
      <tr>
        <td><button>1</button></td>
        <td><button>2</button></td>
        <td><button>3</button></td>
        <td><button>+</button></td>
      </tr>
      <td><button>0</button></td>
      <td><button>.</button></td>
      <td><button>/</button></td>
      <td><button>=</button></td>
    </table>
  </div>

</body>
<script src="calculator.js"></script>

</html>

【问题讨论】:

  • 可能你的意思是eval(result.value) 来评估字符串的内容!
  • 你为什么要这样做?这只会将属性设置为已经存在的值。
  • 您正在尝试评估实际字符串:result.value = eval('result.value')。您需要删除变量周围的引号。 (也可以使用带有代码高亮功能的编辑器,并始终检查编辑器如何为您的代码部分着色)
  • 您的代码正在评估'result.value',然后返回result 元素的值。正如 phuzi 所说,您需要评估值中的字符串,即result.value

标签: javascript html css eval calculator


【解决方案1】:

正如 cmets 中提到的:您正在评估字符串 'result.value',而不是 result.value 的内容。

除此之外,您还将符号 = 添加到“屏幕”,这会使评估失败。我在下面做了一个修复。

var buttons = document.querySelectorAll('button')
var result = document.getElementById('screen')


function number() {
  for (num of buttons) {
    num.addEventListener('click', (e) => {
      buttonText = e.target.innerText
      console.log(buttonText)

      if (buttonText === '=') {
        result.value = eval(result.value)
      } else if (buttonText === 'x') {
        result.value = '*'
      } else if (buttonText === 'C') {
        result.value = ''
      } else { // I added this part, and removed it from above the ifs
        result.value += buttonText
      }

    })

  }
}
number()
body {
  font-family: 'sans-serif', Tahoma, Geneva, Verdana;
}

.container {
  text-align: center;
}

input {
  font-size: 1.3rem;
  margin-bottom: .5rem;
  padding: .2rem;
  text-align: right;
}

input:focus {
  border: none;
}

table {
  margin: auto;
}

button {
  width: 3.38rem;
  height: 2rem;
  border: none;
  font-size: 16px;
  cursor: pointer;
  background-color: aliceblue;
}

button:hover {
  background-color: #d4c2c2;
}

td:hover {
  background-color: #d4c2c2;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Calculator</title>
  <link rel="stylesheet" href="style.css" />
  <script src="https://kit.fontawesome.com/c77dc29510.js" crossorigin="anonymous"></script>
</head>

<body>
  <div class="container">
    <h1>Calculator</h1>

    <input type="text" value="" id="screen" />

    <table>
      <tr>
        <td colspan="2" style="background-color: aliceblue;"><button> <i class="fas fa-backspace"</i> </button></td>
        <td><button>C</button></td>
        <td><button>%</button></td>
      </tr>
      <tr>
        <td><button>7</button></td>
        <td><button>8</button></td>
        <td><button>9</button></td>
        <td><button>x</button></td>
      </tr>
      <tr>
        <td><button>4</button></td>
        <td><button>5</button></td>
        <td><button>6</button></td>
        <td><button>-</button></td>
      </tr>
      <tr>
        <td><button>1</button></td>
        <td><button>2</button></td>
        <td><button>3</button></td>
        <td><button>+</button></td>
      </tr>
      <td><button>0</button></td>
      <td><button>.</button></td>
      <td><button>/</button></td>
      <td><button>=</button></td>
    </table>
  </div>

</body>
<script src="calculator.js"></script>

</html>

【讨论】:

  • 这基本上是一个错字问题,即使您不同意,也有超过 100% 的机会这是重复的。请在发布答案之前先检查这些内容。
  • @ChrisG 我看不出帮助这个人得到答案的问题,即使存在重复。我不介意有人将此问题标记为重复,但他需要帮助。
  • 将其标记为欺骗 a) 回答了问题 b) 消除了网站的混乱。这就是为什么首先存在标记为欺骗的可能性的原因。该网站主要不是帮助个人解决他们的编码问题,它主要是关于创建一个详尽的常见编程问题及其解决方案的集合。
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2018-05-06
  • 2013-11-11
  • 1970-01-01
相关资源
最近更新 更多