Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更好的方法在单个if语句中写入| |_Javascript - Fatal编程技术网

Javascript 有没有更好的方法在单个if语句中写入| |

Javascript 有没有更好的方法在单个if语句中写入| |,javascript,Javascript,我想知道是否有更好的方法来编写下面的代码。我希望我的if语句忽略所有键码。但是,用下面的方式来写似乎是相当混乱的 谢谢 if (event.keyCode === 9 || event.keyCode === 91 || event.keyCode === 20 || event.keyCode === 18 || event.keyCode === 17 || event.keyCode === 37) 使用: 您可以使用或来代替 或 在性能方面,我

我想知道是否有更好的方法来编写下面的代码。我希望我的if语句忽略所有键码。但是,用下面的方式来写似乎是相当混乱的

谢谢

if (event.keyCode === 9 
   || event.keyCode === 91 
   || event.keyCode === 20 
   || event.keyCode === 18 
   || event.keyCode === 17 
   || event.keyCode === 37)
使用:

您可以使用或来代替



在性能方面,我强烈建议您使用
indexOf

如果出现
NAN
问题,您应该注意的另一个方面是
包括
索引之间的关系。下面有两篇文章可以帮助您全面了解它们:


您可以将if逻辑传递到函数中

函数isValidKey(keyCode){
常数validKeys=[9,91,20,18,17,37];
返回有效密钥。包括(密钥码);
}
//...
如果(isValidKey(event.keyCode))。。。

正如其他人所说,您可以使用有效的密钥代码创建数组或集合,并使用event.keyCode变量测试成员资格。我在下面编写了一些示例代码,介绍了如何以干净的方式执行此操作:)


对于经常比较的更大的值列表,使用


includes
some
indexOf
的性能更高(我不确定:)@arieljuodI已经用一些与性能相关的文档更新了我的答案,请看一看@arieljuods记住这些基准测试结果是从2017年开始的,这个基准测试显示,当前Chrome版本的includes在性能上有很大的差异,而当前firefox的性能则稍差,但这取决于浏览器(尽管Chrome的这种差异,我还是会选择includes而不是indexOf)。这实际上取决于特定的浏览器实现@arieljuodIn就性能而言,我强烈建议您使用
indexOf
@blex@NguyễnVănPhong你想得太多了;)是的,如果有数千个值需要检查一千次,这可能是有意义的。我们在这里讨论的是按键<代码>包含
的存在有一个原因:使您的代码更易于使用understand@blex是 啊这只是计算机科学的另一个方面-
性能、时间/空间复杂性等…
。是的,
包括
也可以:)如果有人不知道为什么它会更优化,
包含
是O(1)操作,而
包括
是O(n),因为集合有O(1)搜索时间,而数组有O(n)搜索时间。在这种情况下,对于少量元素,速度的提高可能并不明显,但无论如何,这是一种良好的做法,根据本文,即使在10个元素
has
上,速度也会稍快一些:
if ([9, 91, 20, 18, 17, 37].includes(event.keyCode))
if ([9, 91, 20, 18, 17, 37].some(val => val === event.keyCode))
if ([9, 91, 20, 18, 17, 37].indexOf(event.keyCode) !== -1)
// let eventKeyCode = event.keyCode;
let eventKeyCode = 28;
let validKeyCodes = [9, 91, 20, 18, 17, 37];
if (validKeyCodes.includes(eventKeyCode)) {
  // do something 
  console.log(`event has valid key code: ${eventKeyCode}`);
} else {
  // catch logic
  console.log(`event has invalid key code: ${eventKeyCode}`);
}
const codes = new Set([9, 91, 20, 18, 17, 37]);
if(codes.has(event.keyCode)){
   // do something
}