You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断字符串是否属于集合:逻辑或、includes、Switch哪种更高效?

短字符串集合归属判断的JavaScript效率最优方案

针对你提到的三种判断方式,结合「匹配概率均匀、原数据非数组」的场景,实际性能优先级及分析如下:

1. 最优选择:逻辑或链式判断

if(checkString === 'string1'
  || checkString === 'someString2'
  || checkString === 'differentString3'
  || checkString === 'lol'
  || checkString === 'jsIsFun'
){doThing();}
  • 无任何额外内存开销:不需要创建数组、Set或其他数据结构,直接进行值比较。
  • 引擎优化到位:即使匹配概率均匀,这种写法的执行路径最直接,没有额外的方法调用或数据结构初始化成本。

2. 次优选择:Switch语句

switch (checkString) {
  case 'string1':
  case 'string2':
  case 'differentString3':
  case 'lol':
  case 'jsIsFun':
    doThing();
    break;
}
  • 引擎对字符串case有专门优化(如生成跳转表),短集合下和逻辑或的性能差异极小。
  • 当后续需要扩展判断的字符串数量时,可读性比长逻辑或链更好。

不推荐:即时创建数组的includes判断

if(['string1', 'string2','differentString3', 'lol', 'jsIsFun'].includes(checkString)){
  doThing();
}
  • 核心问题:每次判断都会新建一个数组,带来不必要的内存分配与GC压力,频繁调用时累积开销明显。
  • 若坚持用includes,必须提前缓存数组(定义在判断逻辑外部),消除重复初始化的成本:
const targetStrings = ['string1', 'string2','differentString3', 'lol', 'jsIsFun'];
// 后续判断复用数组
if(targetStrings.includes(checkString)) {
  doThing();
}

更优扩展方案:Set集合

如果判断逻辑会被频繁调用,或后续可能扩展字符串数量,Set是比数组更高效的选择:

const targetSet = new Set(['string1', 'string2','differentString3', 'lol', 'jsIsFun']);
// 判断时调用has()
if(targetSet.has(checkString)) {
  doThing();
}
  • Set的has()方法时间复杂度为O(1),数组includes()为O(n),元素越多性能优势越显著。
  • 提前初始化一次Set,同样没有重复创建的开销,代码简洁性也优于逻辑或链。

内容的提问来源于stack exchange,提问作者Aaron Morefield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:05:13