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
相关产品推荐
相关产品推荐

