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

ES6中多OR条件判断的最佳实践与写法咨询

多值相等判断的最佳实践建议

嘿,针对你提出的这种「判断某个值是否属于多个指定值之一」的场景,我来拆解下你想到的两种写法的优劣,再给些更贴合不同场景的专业建议:

先明确你的核心需求

你需要判断 el.type 是否是 'state'、'status' 等多个值中的一个,进而执行对应的处理逻辑,目前有两种实现思路:

写法一:数组 includes 校验法

你的原始代码可以优化下(比如把数组提为常量,避免重复创建),优化后版本:

// 把有效值列表提为外部常量,只初始化一次
const VALID_TYPES = ['state', 'status', '...'];

function isValid() {
  // 可选:先做空值校验,避免 el.type 为 undefined/null 时的潜在问题
  if (!el.type) return false;
  const isMatch = VALID_TYPES.includes(el.type);
  if (isMatch) {
    // 执行你的处理逻辑
  }
  return isMatch;
}

优点:

  • 可维护性极强:要新增/删除有效值,只需要修改 VALID_TYPES 数组,不用动判断逻辑,尤其适合值列表可能变化的场景
  • 语义化清晰:VALID_TYPES.includes(el.type) 一眼就能看懂是「判断是否在有效列表内」
  • 扩展性好:如果未来需要把有效值列表从硬编码改成从配置/接口获取,这种写法的改动成本极低

小缺点:

  • 数组 includes() 是线性查找,当值列表非常长(比如上百个值)时,性能会略逊于Set的查找,但绝大多数业务场景下这个差异可以忽略

写法二:直接多条件或运算

你的原始写法:

function isValid() {
  const isMatch = el.type === 'state' || el.type === 'status' || ...;
  if (isMatch) {
    // 执行你的处理逻辑
  }
  return isMatch;
}

优点:

  • 性能最优:没有额外的数组创建、方法调用开销,就是原生的相等判断,执行速度最快
  • 写法直观:当值的数量很少(比如2-3个)时,代码简洁易懂,不用额外维护数组

缺点:

  • 维护成本高:当值的数量变多(比如超过3个),代码会变得冗长杂乱,新增/删除值时容易漏写或写错条件
  • 语义化弱:一堆||连起来的表达式,不如数组写法一眼能看出是「校验是否在有效列表内」

我的专业建议

根据不同场景选择最合适的写法:

  • 如果需要判断的值数量少(3个以内),且未来大概率不会新增:选写法二,简洁直接,性能拉满
  • 如果值数量较多,或者未来可能会新增/修改有效值:选写法一的优化版(把数组提为常量),兼顾可维护性和语义化
  • 如果值数量非常多(比如几十个以上):可以用Set来存储有效值,因为Set.has()的查找是O(1)时间复杂度,比数组includes()的O(n)效率更高,示例:
const VALID_TYPES = new Set(['state', 'status', '...']);

function isValid() {
  if (!el.type) return false;
  const isMatch = VALID_TYPES.has(el.type);
  if (isMatch) {
    // 执行你的处理逻辑
  }
  return isMatch;
}

另外补充个小细节:如果el可能为null/undefined,或者el.type可能不存在,一定要先做空值校验,避免出现Cannot read properties of undefined (reading 'type')这类报错哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:43:27