JavaScript 中的相等与不等运算详解

作者:阿沐

时间:2026-10-24

浏览:666

本文详细解析 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,因为在未进行类型转换的前提下,一个是字符串,一个是数字,类型不同导致不相等。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章