JavaScript新手感到困惑:if(event.shiftKey == 57)?

q8l4jmvw  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(82)

我希望我在正确的地方回答这类问题😄,我刚开始在Coursera上学习元课程,在JavaScript部分之后,我认为在GitHub上审查其他人的代码是一个好主意,以获得对整个项目的一些感觉和理解。
所以现在我坐在这里,花了2小时的研究和感觉愚蠢的af...我不明白这段代码:

document.addEventListener("keydown", function (event) {
  if (event.shiftKey == 57) {
    event.key = "(";

afaikshiftKey总是返回一个布尔值-那么这个是如何工作的呢?(是的,它确实如此)。有人能给我解释一下吗?😄
我试着google了两个小时。

eqzww0vc

eqzww0vc1#

简答:它不工作,这是一个错误

正如你所指出的,shiftKey总是返回一个布尔值,所以表达式(event.shiftKey == 57)将总是false,看看GitHub上围绕它的代码:

if (event.shiftKey == 57) {
    event.key = "(";
} else if (event.shiftKey == 48) {
    event.key = ")";
} else if (event.shiftKey == 53) {
    event.key = "%";
}

我们可以看到,开发人员基本上是试图自己实现shift键功能。(注意57是9字符的ascii值,48是0的ascii值,在美国键盘布局上,shift+0 == )您不必手动实现shift键行为,浏览器已经为您处理了。事实上,由于不同的键盘布局在不同的地方放置了不同的shift键修饰符,我强烈建议你不要这样做。
它本质上只是一个bug,一个相当无害的bug,因为代码永远不会被触发,也不会丢失任何东西。您可以很容易地想象开发人员可能会错误地编写此代码,然后测试shift键的行为,并假设由于shift键工作,因此他的代码也必须工作。
我认为这是一个真正的好赶上一个新的开发人员虽然!如果你觉得可以的话,你可以打开一个issue或者pull request ;).

vwkv1x7d

vwkv1x7d2#

所以键被分配了ascii values,当有人在按shift的同时按下“9”键(ascii值57)时,看起来这个人想返回一个开括号。似乎让你感到困惑的是[JavaScript中==和===的区别][2],学习[truthy和falsy][3]值也可能帮助你理解这里发生了什么。然而,如果没有任何上下文,我不确定这段代码是否能完成它的预期任务,但我希望这些参考资料能帮助您理解。
[2]:https://www.freecodecamp.org/news/loose-vs-strict-equality-in-javascript/#:~:text= The%20%3D%3D%20operator%20performs%20a,well%20as%20the%20same%20value).[3]:https://developer.mozilla.org/en-US/docs/Glossary/Truthy

相关问题