优先用 !== 而非 !=,因 != 会隐式转换导致反直觉结果;判断非空应避免 !value,改用 value != null 或 ??;防条件赋值错误可用 ESLint 或尤达写法;多条件“不等于任意一个”须用 && 或 includes。

JavaScript 中不等于判断(!= 和 !==)本身没问题,但用错场景或混淆语义就容易埋下 Bug。关键不是“怎么写不等于”,而是“在什么情况下该用哪个、为什么不能乱用”。下面说几个最常踩坑的点和对应解法。
优先用 !==,别依赖 !=
!= 会做隐式类型转换,结果常常反直觉:
-
0 != false→ false(因为false被转成0,值相等) -
"" != false→ false(空字符串也被转成0) -
null != undefined→ false(JS 规定它们宽松相等)
这些都不是业务逻辑真正想表达的“不等于”。只要不是刻意利用类型转换,一律改用 !==——它同时比对类型和值,行为确定、可预测。
判断“非空”别用 !value
if (!value) 看似省事,但它会把 0、false、''、[] 全当成“空”,而实际业务中这些可能是合法有效值(比如用户余额为 0、开关关闭状态为 false)。
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
真正要排除的往往只是 null 和 undefined,推荐写法:
-
value != null(简洁,社区通用,兼容 null/undefined) -
value !== null && value !== undefined(语义最清晰,适合强规范团队) -
value ?? 'default'(需要提供默认值时用,ES2020+)
条件判断里防手滑写成赋值
把 == 或 === 误写成 = 是经典低级错误:
-
if (role = 'ADMIN')→ 不报错,但变成赋值操作,恒为真
两个实用拦截方式:
- 启用 ESLint 的
no-cond-assign规则,自动标红所有条件里的赋值 - 写成“尤达写法”:
if ('ADMIN' === role)—— 即使误写成'ADMIN' = role,JS 直接抛ReferenceError,立刻暴露问题
多条件“不等于任意一个”别用 ||
比如想判断手机号前缀 既不是 '075' 也不是 '070',错误写法:
-
if (prefix != '075' || prefix != '070')→ 永远为 true(只要 prefix 是 '075',第一个条件假、第二个真,整体仍为真)
正确逻辑是“全部都不匹配”,必须用 &&:
if (prefix !== '075' && prefix !== '070')- 更清晰可读的写法:
!['075', '070'].includes(prefix)

















