JavaScript 最奇怪的比较
发布: (2026年2月16日 GMT+8 18:18)
2 分钟阅读
原文: Dev.to
Source: Dev.to
为什么 [] == false 为 true
[] == false // true
== 运算符会进行 类型强制转换:
false被转换为0。[]首先被转换为一个空字符串""。- 空字符串
""随后被转换为0。
于是比较变成了:
0 == 0 // true
为什么 [] == ![] 为 true
[] == ![] // true
求值步骤:
![]—— 空数组在布尔上下文中是 truthy,所以取反得到false。- 表达式变为
[] == false,我们已经知道它的结果是true(见上文)。
小结
== 运算符因为隐式的类型转换会产生令人惊讶的结果。
大多数开发者更倾向使用严格相等运算符 ===,它 不会 进行强制转换,从而避免这些陷阱。
[] === false // false
[] === ![] // false
了解强制转换的工作原理,就能消除 JavaScript 比较中的“怪异”。祝编码愉快! ✨