在javascript(开关)中发现无效的运算符我该如何解决这个代码

Posted

技术标签:

【中文标题】在javascript(开关)中发现无效的运算符我该如何解决这个代码【英文标题】:Invalid operator found in javascript (switch) how can i solve this code 【发布时间】:2022-01-16 07:31:22 【问题描述】:
    <form action="">
        <h2>Inter A Numbers</h2>
        <label for="">Number One</label>
        <input type="text" id="num1">
        <br>
        <br>
        <label for="">Number Tow</label>
        <input type="text" id="num2">
        <br>
        <br>
        <input type="button" onclick="operator()" value="Multiply">
        <input type="button" onclick="operator()" value="Divide">
        <input type="button" onclick="operator()" value="Addition">
        <input type="button" onclick="operator()" value="Subtraction">
        <input type="button" onclick="operator()" value="Clear">
    </form>
    <p>The Result Is: <br>
        <span id="result"> </span>
    </p>
<script>

    let result;
    const number1 = document.getElementById("num1");
    const number2 = document.getElementById("num2");
    switch(number1,number2) 
    case '+':
        result = number1 + number2;
        document.write(`$number1 + $number2 = $result`);
        break;
    
    case '-':
         result = number1 - number2;
         document.write(`$number1 - $number2 = $result`);
        break;
    
    case '*':
         result = number1 * number2;
         document.write(`$number1 * $number2 = $result`);
        break;
    
    case '/':
         result = number1 / number2;
         document.write(`$number1 / $number2 = $result`);
        break;
    
    default:
        document.write('Invalid operator found');
        break;


<script/>

【问题讨论】:

“number1”或“number2”如何成为这些运算符字符串之一?另外switch() 表达式与switch (number2) 完全相同;我不确定你打算这样做,但这不是switch 的工作方式。 我想使用 html 为算术运算 ( + - * / ) 编写代码,并且用户输入两个数字并按下其中一个按钮以使用 (switch) 显示结果 此外,该脚本在页面加载时执行,而不是在单击其中一个按钮时执行。他们试图调用未在任何地方定义的operator() 函数。 【参考方案1】:

您需要在Switch 中传递一个表达式。表达式是与每个 case 子句匹配的内容。在您的情况下,表达式是确定运算符('+'、'-'、'/'、'*')的字符。此外,您的脚本中没有名为 operator 的函数。我认为它应该是这样工作的:

function operator(operation) 
  let result;
  const number1 = Number(document.getElementById("num1").value);
  const number2 = Number(document.getElementById("num2").value);

  if (!operation) 
    document.getElementById("result").innerHTML = "";
    document.getElementById("num1").value = "";
    document.getElementById("num2").value = "";
   else if (isNaN(number1) || isNaN(number2))
    document.getElementById("result").innerHTML = "Invalid operation found";
  else 
    switch (operation) 
      case '+':
        result = number1 + number2;
        document.getElementById("result").innerHTML = (`$number1 + $number2 = $result`);
        break;

      case '-':
        result = number1 - number2;
        document.getElementById("result").innerHTML = (`$number1 - $number2 = $result`);
        break;

      case '*':
        result = number1 * number2;
        document.getElementById("result").innerHTML = (`$number1 * $number2 = $result`);
        break;

      case '/':
        result = number1 / number2;
        document.getElementById("result").innerHTML = (`$number1 / $number2 = $result`);
        break;
    
  
<form action="">
  <h2>Inter A Numbers</h2>
  <label for="">Number One</label>
  <input type="text" id="num1">
  <br>
  <br>
  <label for="">Number Tow</label>
  <input type="text" id="num2">
  <br>
  <br>
  <input type="button" onclick="operator('*')" value="Multiply">
  <input type="button" onclick="operator('/')" value="Divide">
  <input type="button" onclick="operator('+')" value="Addition">
  <input type="button" onclick="operator('-')" value="Subtraction">
  <input type="button" onclick="operator()" value="Clear">
</form>
<p>The Result Is: <br>
  <span id="result"> </span>
</p>

【讨论】:

"你需要在 Switch 中传递一个表达式" - OP 确实switch 语句中放入了一个表达式 我的意思是根据这个特定的用例来表达,它是运算符符号。我现在添加了相同的。感谢您指出。【参考方案2】:

1)你应该在opeartor函数中通过JS传递一个操作符:

<input type="button" onclick="operator('*')" value="Multiply">

2)您的脚本将运行一次,因此最好创建一个函数并在单击按钮时调用它。

3) 你需要有value 对应mathematical opeartion

const number1 = +document.getElementById( "num1" ).value;
const number2 = +document.getElementById( "num2" ).value;

const display = document.getElementById("result");

function operator(op) 
  let result;
  const number1 = +document.getElementById("num1").value;
  const number2 = +document.getElementById("num2").value;
  switch (op) 
    case '+':
      result = number1 + number2;
      display.textContent = `$number1 + $number2 = $result`;
      break;

    case '-':
      result = number1 - number2;
      display.textContent = `$number1 - $number2 = $result`;
      break;

    case '*':
      result = number1 * number2;
      display.textContent = `$number1 * $number2 = $result`;
      break;

    case '/':
      result = number1 / number2;
      display.textContent = `$number1 / $number2 = $result`;
      break;

    case 'clear':
      display.textContent = "";
      break;

    default:
      display.textContent = 'Invalid operator found';
      break;

  
<form action="">
  <h2>Inter A Numbers</h2>
  <label for="">Number One</label>
  <input type="text" id="num1">
  <br>
  <br>
  <label for="">Number Tow</label>
  <input type="text" id="num2">
  <br>
  <br>
  <input type="button" onclick="operator('*')" value="Multiply">
  <input type="button" onclick="operator('/')" value="Divide">
  <input type="button" onclick="operator('+')" value="Addition">
  <input type="button" onclick="operator('-')" value="Subtraction">
  <input type="button" onclick="operator('clear')" value="Clear">
</form>
<p>The Result Is: <br>
  <span id="result"> </span>
</p>

【讨论】:

【参考方案3】:

你在 Switch 里面的表达是错误的

switch(number1,number2)

根据W3 schools docs

这就是你的 switch 语句的样子

switch(expression) 
  case x:
    // code block
    break;
  case y:
    // code block
    break;
  default:
    // code block

这就是它的工作原理:

    switch 表达式被计算一次。

    将表达式的值与每个案例的值进行比较。

    如果匹配,则执行关联的代码块。

    如果没有匹配,则执行默认代码块。

我猜你想获取运算符的值,

而不是使用

switch(number1,number2)

你应该得到你的运营商的参考

例如

    const operator= document.getElementById("operator");

然后切换运营商

switch(operator)

【讨论】:

以上是关于在javascript(开关)中发现无效的运算符我该如何解决这个代码的主要内容,如果未能解决你的问题,请参考以下文章

GTM 在模板中发现无效的 HTML、CSS 或 JavaScript

无效的 ReportDefinition Xml:cvc-complex-type.2.4.a:发现以元素“运算符”开头的无效内容

我应该啥时候使用?? (无效合并)vs || (逻辑或)?

消息 443,级别 16,状态 15,过程 myinsert,第 6 行 在函数内对带副作用的运算符 ‘INSERT‘ 的使用无效。

JavaScript - 从开关中获取价值[重复]

新的 C# 8.0 开关表达式的运算符优先级是啥?