JavaScript新手疑惑:event.shiftKey == 57为何能生效?
解惑:
event.shiftKey == 57的运行逻辑 你说的完全没错:event.shiftKey是布尔值(只有true或false两种结果),而57是数字。这段代码能“正常运行”(不报错),但本质上是逻辑错误,只是JavaScript的特性让它没有崩溃,甚至可能被你误以为在工作。
核心原因:隐式类型转换的坑
JavaScript里用==做比较时,会自动做隐式类型转换:
- 布尔值
true会被转成数字1,false转成数字0 - 所以
event.shiftKey == 57实际等于1 == 57(按住shift时)或0 == 57(没按住shift时),这两个比较结果全都是false
也就是说,这个if语句里的代码(event.key = "(")永远不会被执行。
为什么你觉得它“正常运行”?
大概率是两种情况:
- 这段代码本身没有语法错误,浏览器不会抛出报错,所以看起来能“正常运行”,但核心逻辑根本没生效
- 原代码存在笔误,本来应该是判断“按住shift+9键”(键盘上9键的keyCode是57,按住shift打9会输出(),结果写错成了
event.shiftKey ==57,正确的判断逻辑应该是结合shiftKey和按键编码/按键值
正确的写法参考
如果要实现“按住shift+9时手动修改按键内容”(其实浏览器默认就会输出(,除非有特殊需求),正确的代码可以是这样:
document.addEventListener("keydown", function (event) { // 判断是否按下9键且按住shift if (event.key === "9" && event.shiftKey) { event.key = "("; // 若要阻止浏览器默认输出行为,可加上这行 // event.preventDefault(); } });
内容的提问来源于stack exchange,提问作者Timo Fuchs
相关产品推荐
相关产品推荐

