JS的switch语句中能否使用!(非)运算符?校验不生效问题求解
问题根源
你写的switch(!(operator))逻辑完全不成立,!是逻辑非运算符,会把传入的操作数转为布尔值:只要operator是不为空的字符串、数字等真值,!(operator)的结果就是false;如果operator是空字符串、null等假值,结果就是true。你拿布尔值和"+"、"-"这类字符串做匹配,永远不可能命中case,所以校验不会生效。
带!运算符的switch实现方案
如果你一定要用!运算符配合switch完成校验,可以判断运算符是否不在允许的列表中,写法如下:
function showResult(){ let firstNum = document.getElementById("num1").value; firstNum = Number(firstNum); let secNum = document.getElementById("num2").value; secNum = Number(secNum); let operator = document.getElementById("operator").value.trim(); // 加trim去除首尾空格避免误判 let getErrorElem = document.getElementById("error"); let getResElem = document.getElementById("res"); let result; // 空值校验 switch(operator){ case "": getErrorElem.innerHTML = "Operator field can't be empty"; return; // 匹配到空值直接终止后续逻辑 } // 非法运算符校验,使用!运算符 switch (!['+', '-', '*', '/'].includes(operator)) { case true: alert("You can only input (+, -, *, /) these signs in operator field"); return; } // 后续正常计算逻辑 }
逻辑说明
['+', '-', '*', '/'].includes(operator)会判断用户输入的运算符是否在合法列表内,返回布尔值- 前面加
!取反后,只要用户输入的是非法运算符,表达式结果就为true,命中case true分支抛出错误提示 - 空值校验单独拆分可以返回针对性的错误提示,如果你不需要区分空值和其他非法输入的提示,也可以直接合并到后面的校验逻辑里
内容的提问来源于stack exchange,提问作者Farhan
相关产品推荐
相关产品推荐

