我有这两个功能,我想知道哪一个更快。我假设第一个,但如果我要评估数百个案例呢?
function isSpecialKey(k) {
switch (k) {
case 9:
return true;
break;
case 16:
return true;
break;
case 17:
return true;
break;
case 18:
return true;
break;
case 20:
return true;
break;
case 37:
return true;
break;
case 38:
return true;
break;
case 39:
return true;
break;
case 40:
return true;
break;
default:
return false;
break;
}
}
function isSpecialKey(k) {
var arr = [9, 16, 17, 16, 8, 20, 37, 38, 39, 40]
for (i = 0; i < arr.length; i++) { if (k == arr[i]) { return true; } }
return false;
}
答案 0 :(得分:4)
这种情况不太可能发生,即使有数百个案例也是如此。它可能开始涉及成千上万或数万,但在这种情况下,你可能不应该使用JavaScript!至少不在网络浏览器中。
通常 - 第二种方式是从维护角度来看唯一有意义的方法。我绝对会接受。
但是,根据您的具体情况,有一个better solution.
答案 1 :(得分:2)
而不是这样做,只需创建一个地图:
var specialKeys = {
9: true,
16: true,
17: true,
...
40: true
};
然后你可以像这样测试它:
if(specialKeys[value]) {
...
}
答案 2 :(得分:2)
怎么样?
function isSpecialKey(key) {
return [9, 16, 17, 16, 8, 20, 37, 38, 39, 40].indexOf(key) > -1;
}
更新。我记得有些浏览器在数组上不支持indexOf
,但我忘了它们中的哪一个,所以要小心。
答案 3 :(得分:1)
您可以在交换机中使用fallthrough,这样可以减少代码:
function isSpecialKey(k) {
switch (k) {
case 9:
case 16:
case 17:
case 18:
case 20:
case 37:
case 38:
case 39:
case 40:
return true;
}
return false;
}
还要考虑:
function isSpecialKey(k) {
return (
k == 9 ||
k == 16 ||
k == 17 ||
k == 18 ||
k == 20 ||
k == 37 ||
k == 38 ||
k == 39 ||
k == 40
);
}
答案 4 :(得分:0)
使用地图;更快。 “数以百计”的交换机永远不会接近通过代码审查。