现象:使用if与switch做判断时,判断结果不同
```javascript
<script>
document.addEventListener("keydown", (event) => {
if (event.key === "ArrowUp" || "Up") {
console.log("if", event.key, "up");
} else if (event.key === "ArrowDown" || "Down") {
console.log(event.key, "down");
} else if (event.key === "ArrowLeft" || "Left") {
console.log(event.key, "left");
} else if (event.key === "ArrowRight" || "Right") {
console.log(event.key, "right");
}
switch (event.key) {
case "ArrowUp" || "Up":
console.log("switch", event.key, "up");
break;
case "ArrowDown" || "Down":
console.log("switch", event.key, "down");
break;
}
});
</script>
###### 运行结果及报错内容
控制台:
```javascript
测试.html:13 if ArrowUp up
测试.html:23 switch ArrowUp up
测试.html:13 if ArrowDown up
测试.html:26 switch ArrowDown down
测试.html:13 if ArrowLeft up
测试.html:13 if ArrowRight up
为什么所有的按键都能过 event.key === "ArrowUp" || "Up" 判断
if中的逻辑判断出错了
event.key === "ArrowUp" || "Up" 的执行时候
第一:先进行event.key === "ArrowUp" 赋值
第二在进行 前面赋值结果 || "Up"
加入按下 a
第一 a=== "ArrowUp" ---->返回false
第二 false|| "Up" ----->"up"
第三:"up" 在if中进行boolen转化 为true 所以只要按下key if条件始终都是true
需要调整为
event.key === "ArrowUp" || event.key === "Up"
if(event.key === "ArrowUp" || event.key === "Up"){......}
因为event.key === "ArrowUp" || "Up" 等同于判断了event.key === "ArrowUp" 或者 “Up” 是否为true。
// 可以这样试试
if(event.key === "ArrowUp" || event.key === "Up" )
if(event.key === "ArrowUp" || event.key === "Up" )