JavaScript中如何实现空字符串、null、undefined相等的高效比较?
JavaScript 字符串比较逻辑优化实现
需求回顾
仅当两个字符串字符不同时判定为不等,且空字符串('')、null、undefined视为完全相等。
原代码的问题
你当前的代码会把所有假值(falsy)(比如0、false)都等同于空等价类型,但需求只要求''、null、undefined视为相等,这会导致非预期的判定结果。
最快实现方案
以下是兼顾性能与可读性的实现,利用短路判断减少不必要的计算:
function isNotEqual(s1, s2) { // 判定是否属于空等价类型:null/undefined/空字符串 const isEmpty1 = s1 == null || s1 === ''; const isEmpty2 = s2 == null || s2 === ''; // 两者都是空等价,判定为相等,返回false if (isEmpty1 && isEmpty2) return false; // 一个是空等价,另一个不是,判定为不等,返回true if (isEmpty1 || isEmpty2) return true; // 都是非空字符串,直接比较内容 return s1 !== s2; }
更紧凑的单行写法(性能一致)
如果偏好简洁,可以用空合并运算符简化,但可读性稍降:
const isNotEqual = (s1, s2) => !(s1 == null || s1 === '') || !(s2 == null || s2 === '') ? (s1 ?? '') !== (s2 ?? '') : false;
逻辑验证
- 空等价组合(如
''和null、undefined和''):返回false(视为相等) - 空等价与非空字符串(如
null和'abc'):返回true(视为不等) - 非空字符串内容不同(如
'abc'和'abd'):返回true - 非空字符串内容相同(如
'abc'和'abc'):返回false
内容的提问来源于stack exchange,提问作者gt.guybrush
相关产品推荐
相关产品推荐

