!== 严格不等于,类型不同直接为true;!= 宽松不等于,先类型转换再比较值。推荐优先使用 !==,因其行为确定、可预测,避免隐式转换带来的陷阱。

理解 != 和 !== 的差异,关键在于“是否允许类型自动转换”——!= 会先尝试把两边转成同一类型再比值,!== 则一步到位:类型不同直接判为不相等,连值都不用比。
!= 是宽松不等于:先转换,再比较
它遵循和 == 对应的抽象比较规则,遇到类型不同时会按规范做隐式转换:
-
5 != '5'→false(字符串'5'被转成数字5,值相等) -
0 != false→false(false转为0,值相等) -
null != undefined→false(规范特例,两者被认定为“宽松相等”) -
'0' != []→false(空数组[]调用toString()得到空字符串,再转为数字0)
!== 是严格不等于:类型和值都必须一致才返回 false
只要类型不同,或类型相同但值不同,结果就是 true;仅当类型相同且值完全相等时,才返回 false:
-
5 !== '5'→true(numbervsstring,类型不同) -
0 !== false→true(numbervsboolean) -
null !== undefined→true(null和undefined类型不同) -
'abc' !== 'abc'→false(同为字符串,内容也一致)
为什么推荐优先使用 !==
隐式转换规则复杂且反直觉,容易埋下隐患:
- 像
'' == 0、[] == false这类结果,靠记忆难覆盖所有边界情况 - 调试时若发现
if (input != 0)意外跳过,可能是因为输入是空字符串或false - 团队协作中,
!==行为确定、可预测,阅读代码时无需脑补转换路径 - TypeScript 或 ESLint 等工具默认警告
!=,鼓励用!==
实际编码中的建议
除非你明确需要宽松比较逻辑(极少见),否则一律用 !==:
- 表单校验:
if (userInput !== '')比!= ''更可靠 - 状态判断:
if (response.status !== 200)避免字符串状态码误判 - 避免陷阱写法:
if (x !== null && x !== undefined)可简写为if (x == null)(仅限此处用==是规范认可的快捷写法),但更清晰的是用if (x === undefined || x === null)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











