JavaScript 逻辑运算符在switch case中不生效的问题

目录

问题由来:

问题原因:

解决问题:

结束语:

补充:


问题由来:

       朋友在学习Js移动Div位置的时候,想要实现当按上方向键和W键的时候都可以让页面中的Div上移。用到了下面的写法,但是发现只接受到了38也就是上方向键,而点击W键的时候就没有效果。即多种不同的Case要执行相同的代码应该如何做呢?

        错误写法如下:

				switch (event.keyCode) {
					case 37:
						//alert("向左"); left值减小
						box1.style.left = box1.offsetLeft - speed + "px";
						break;
					case 39:
						//alert("向右");
						box1.style.left = box1.offsetLeft + speed + "px";
						break;
					case 38 || 87:
						//alert("向上");
						box1.style.top = box1.offsetTop - speed + "px";
						break;
					case 40:
						//alert("向下");
						box1.style.top = box1.offsetTop + speed + "px";
						break;
				}

问题原因:

        这是一种错误的Switch Case语法。在经过调试之后发现38可以正常执行,而87就不被识别,这与或运算符(||)的短路特性有关(当或运算符的条件中的一项被满足时,便会直接执行函数体)。反之如果使用的是与运算符(&&),则会识别38之后再识别87,最终选择87。即在页面上点击W键,Div会向上移动而点击上方向键则不会。


解决问题:

        要使用正确的switch case 语法

        正确写法如下:

		switch (event.keyCode) {
					case 37:
						//alert("向左"); left值减小
						box1.style.left = box1.offsetLeft - speed + "px";
						break;
					case 39:
						//alert("向右");
						box1.style.left = box1.offsetLeft + speed + "px";
						break;
					case 38: case 87:
						//alert("向上");
						box1.style.top = box1.offsetTop - speed + "px";
						break;
					case 40:
						//alert("向下");
						box1.style.top = box1.offsetTop + speed + "px";
						break;
				}

         正确的写法是连续设置多个case,在最后一个case之后写上要执行的函数。


结束语:

        至此问题已经解决完毕了


补充:

        switch 结构说明:

  • switch、case、break、default都是系统关键字,都必须全小写。
  • switch后的小括号( ):小括号内一般是一个变量名,这个变量可能会有不同的取值。
  • 每个 case的值都会与变量的值进行对比,看是否相等,如果一致就执行该 case语句对应的代码。
  • 所有的 case都是 “或”(or) 的关系,每时每刻只有一个 case会满足条件。
  • 每个 case中的代码执行完毕后,必须要用 break 语句来阻止代码自动地向下一个 case运行。
  • 如果不写 break 语句的话,下面所有的 case语句都会执行一遍。
  • 请使用 default关键词来规定匹配不存在时做的事情。可省略不写。

        switch 工作原理: 

  • 首先设置表达式 n(通常是一个变量)。
  • 随后表达式的值会与结构中的每个 case的值做比较。如果存在匹配,则与该 case关联的代码块会被执行。
  • 请使用 break  来阻止代码自动地向下一个 case 运行。
  • 请使用 default关键词来规定匹配不存在时做的事情。即匹配失败时默认要执行的代码。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Donp1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值