You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在JavaScript中,判断字符串是否为多个指定选项之一:单if多或条件判断与switch语句哪个效率更高?

在JavaScript中,判断字符串是否为多个指定选项之一:单if多或条件判断与switch语句哪个效率更高?

嘿,这个问题问得很到位!不少开发者都知道switch比一连串独立的if判断性能要好,但你问到的「单if加多个||条件」和switch的对比,确实是个更具体的场景。咱们先把你给出的两种写法摆出来:

写法1:单if多或条件

if(e.key === "ArrowUp"   ||
   e.key === "ArrowDown" ||
   e.key === "Control"   ||
   e.key === "Escape"){
   // do stuff
}

写法2:switch语句

switch(e.key){
    case "ArrowUp":
    case "ArrowDown":
    case "Control":
    case "Escape":
        // do stuff
        break;
    default:
        break;
}

回到核心问题:这俩到底谁更快?

首先得说在绝大多数日常业务场景里,这点性能差异完全可以忽略。现代JavaScript引擎(比如Chrome的V8)会对这两种写法做非常智能的优化——比如把多||的条件判断转换成内部的查找表,和switch的优化路径其实非常接近,最终的执行速度相差无几。

那什么时候需要在意?或者说怎么选更合适?

  • 如果是像你例子里这样只有4个左右的判断,优先看可读性和维护性:switch在这种「多个case执行同一逻辑」的场景下,写法更清晰,以后要新增判断条件时,直接加新的case行就行,比在if里加||更整洁。
  • 如果判断的选项非常多(比如几十个甚至上百个),那其实还有更优的方案:用Set来存储目标值,然后用has()方法判断,这种查找是O(1)时间复杂度,比前两种写法都高效,代码也更简洁:
const allowedKeys = new Set(["ArrowUp", "ArrowDown", "Control", "Escape"]);
if (allowedKeys.has(e.key)) {
  // do stuff
}

当然,如果你真的在写性能极度敏感的代码(比如游戏里的高频帧循环判断),可以自己在目标浏览器里做个简单的性能测试,但说实话,这种场景太少见了——大部分时候,代码的可读性和可维护性比那几微秒的差异重要得多。

备注:内容来源于stack exchange,提问作者Null Salad

火山引擎 最新活动