===要求值和类型都相同,不转换类型;==会强制类型转换后再比较,易产生反直觉结果,如0==false为true;开发中应优先使用===,仅在明确需宽松检查null/undefined时谨慎使用==。

JavaScript 中 == 和 === 都用于判断两个值是否相等,但核心区别在于:前者会自动进行类型转换(强制类型转换),后者要求值和类型都完全相同,不转换。
== 是“抽象相等”,会尝试转换类型再比较
使用 == 时,如果左右两边类型不同,JavaScript 会按一套规则(抽象相等算法)把它们转成相同类型再比。这个过程容易产生反直觉结果:
-
0 == false→ true(false转为0) -
"0" == false→ true(false→0,"0"→0) -
null == undefined→ true(这是特例,两者互相相等,但都不等于其他值) -
"1" == true→ true(true→1,"1"→1)
=== 是“严格相等”,不转换类型,直接比较
=== 要求左右两边的值和数据类型完全一致,只要有一个不同,就返回 false:
GNU makefile中文手册 pdf,文比较完整的讲述GNU make工具,涵盖GNU make的用法、语法。同时重点讨论如何为一个工程编写Makefile。阅读本书之前,读者应该对GNU的工具链和Linux的一些常用编程工具有一定的了解。诸如:gcc、as、ar、ld、yacc等本文比较完整的讲述GNU make工具,涵盖GNU make的用法、语法。重点讨论如何使用make来管理软件工程、以及如何为工程编写正确的Makefile。 本手册不是一个纯粹的语言翻译版本,其中对GNU make的一些语法
-
0 === false→ false(number≠boolean) -
"0" === 0→ false(string≠number) -
null === undefined→ false(类型不同) -
1 === 1→ true(同为number,值也相同)
什么时候该用哪一个?
日常开发中,强烈推荐优先使用 ===。它行为确定、可预测,避免隐式转换带来的 bug。只有极少数场景才考虑 ==:
- 明确需要兼容
null和undefined的宽松检查,比如if (value == null)等价于value === null || value === undefined(但更推荐直接写后者) - 处理某些老 API 返回值类型不确定,且你确信转换逻辑符合预期(极少)
额外提醒:Object 和特殊值的比较
注意:无论是 == 还是 ===,对象(包括数组、函数)比较的都是引用地址,不是内容:
-
[1,2] == [1,2]→ false -
[1,2] === [1,2]→ false -
NaN == NaN→ false(NaN不等于任何值,包括自己;===同样如此) - 判断
NaN应该用Number.isNaN()或isNaN()









