JavaScript 中的相等与不等运算详解
本文详细解析 JavaScript 中相等(==)与不等(!=)运算符的类型转换逻辑,涵盖布尔值、字符串、数字及对象的转换规则。重点对比完全相等(===)与不等(!==)的行为,强调不进行隐式转换的特性,并说明 null、undefined 及 NaN 的特殊比较结果,帮助开发者避免常见的类型陷阱。
相等运算符的类型转换规则
当参与比较的操作数中有一个是布尔类型时,系统会先将其转换为数字类型。具体而言,false 会被转换为 0,而 true 会被转换为 1。
若其中一个操作数是字符串,另一个是数字,JavaScript 会尝试将字符串转换为数字,随后进行数值比较。
如果其中一个操作数是字符串,另一个是对象类型,系统会调用该对象的 toString 方法将其转换为字符串,然后比较这两个字符串。
当其中一个操作数是数字,另一个是对象时,系统会将对象转换为数值,接着进行数字之间的比较。
以下的规定了一些特殊的比较:
在相等运算中,null 和 undefined 被视为相等。
需要注意的是,null 和 undefined 在相等比较中不会转换为其他任何类型,它们直接判定为相等。
如果比较结果中涉及 NaN(Not-a-Number),相等比较会返回 false,而不相等比较会返回 true。特别地,即使两个操作数都是 NaN,相等比较的结果依然是 false,即 NaN 不等于 NaN。
当两个操作数都是对象时,比较的是它们的引用地址。如果两个变量指向同一个对象实例,则返回 true;否则返回 false。
alert(null == undefined); // true
alert(undefined == null); // true
alert(true == 1); // true
alert(false == 0); // true
alert(true == 2); // false
var obj = {};
alert(10 == obj); // false
完全相等与不完全不等的区别
完全相同的比较 === 和不完全相等 !==
完全相同的比较(===)用于判断两个值在不进行任何类型转换的情况下是否相等。例如:
var a = "100";
var b = 100;
alert(a == b); // true
alert(a === b); // false
使用 == 比较时返回 true,因为字符串 "100" 会被隐式转换为数字 100,随后与数字 100 进行比较,两者数值相等。
使用 === 比较时返回 false,因为字符串 "100" 不会进行类型转换,直接与数字 100 比较时,由于类型不同,结果为不相等。
!== 运算符用于判断两个值在不进行类型转换的情况下是否不相等。
alert(a != b); // false
alert(a !== b); // true
第一种情况(!=)返回 false,因为经过类型转换后它们是相等的;第二种情况(!==)返回 true,因为在未进行类型转换的前提下,一个是字符串,一个是数字,类型不同导致不相等。
为什么叫JavaScript:语言命名由来及与Java的历史渊源
2026-11-05 11:37:48
JS获取当前时间年月日时分秒并格式化为YYYY-MM-DD HH:mm:ss
2026-11-04 21:25:21
不同语言间JS与Java/Python加密结果不一致怎么办
2026-11-04 18:27:23
Mock.js 拦截 Axios 和 Fetch 请求的原理与配置方法
2026-11-04 08:13:59
JS怎么获取当前日期并格式化为YYYY-MM-DD
2026-11-03 18:47:03
