全等(===)不进行类型转换,相等(==)会隐式转换类型后再比较;===要求类型和值均相同,==则按规则转换后比较,如0==false为true而0===false为false。
全等(
===
)不进行类型转换,相等(
==
)会尝试隐式转换类型后再比较,这是两者最核心的区别。
相等(==)会触发隐式类型转换
当操作数类型不同时,
==
会按特定规则转换一方或双方的值,再比较。例如:
→
(
转为
)
→
(字符串
转为数字
)
→
(空字符串转为
,
也转为
)
→
(这是特例,其他值都不与它们相等)
全等(===)要求类型和值都一致
===
跳过所有类型转换,直接判断:类型不同,结果必为
。
→
(
≠
)
→
(
≠
)
→
(对象比较的是引用,不是内容)
→
(唯一一个自身不等于自身的值)
常见易错场景
这些情况在用
==
时容易出人意料:
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
Java免费学习笔记(深入)
”;
返回
(历史遗留行为,
被当作假值处理)
和
都是
(对象/数组用
==
仍比引用,且每次字面量都是新对象)
→
,但
→
(
转为
,
转为
)
建议与实践
除非明确需要松散比较(如兼容旧逻辑),否则一律使用
===
。
用
、
、
显式转换,再用
===
比较,逻辑更清晰
判断是否为
或
,可用
(简洁且安全),但更推荐
ESLint 等工具默认禁用
==
,启用
规则可自动提示
理解转换规则有助于 debug,但日常编码中绕过它,用显式转换加全等,更可靠也更易维护。
0 == falsetruefalse0"0" == 0true"0"0"" == falsetrue0false0null == undefinedtruefalse0 === falsefalsenumberboolean"0" === 0falsestringnumber[1] === [1]falseNaN === NaNfalsedocument.all == nulltruedocument.all{} == {}[] == []false"0" == falsetrue"0" == truefalsetrue1"0"0Number()Boolean()String()nullundefinedvalue == nullvalue === null || value === undefinedeqeqeq