You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript比较运算符出现特殊结果:是语言特性还是Bug?

为什么JavaScript里会出现Boolean([])为true、Boolean("")为false但[] == ""为true?

别慌,这真不是JavaScript的bug!反而这是JS里**强制类型转换(Type Coercion)**规则下的经典表现,算是前端圈里人人都要摸清楚的"坑点",咱们逐个拆解:

1. Boolean([]) → true的原因

JavaScript里有明确的「假值列表」,只有当值属于以下列表时,转布尔才会得到false:

  • undefined
  • null
  • false
  • 0、-0、NaN
  • ""(空字符串)

空数组[]并不在这个列表里——哪怕它看起来"空",但JS判定它是一个有效的对象,不属于假值范畴,所以转布尔就是true。

2. Boolean("") → false的原因

这个就很直白了:空字符串""刚好在上面的假值列表里,所以调用Boolean()转换时直接返回false。

3. [] == "" → true的核心:抽象相等的转换规则

这是最容易迷惑人的点,因为==(抽象相等)和===(严格相等)的逻辑完全不同:
当==比较两个不同类型的值时,JS会按照一套固定规则先把它们转换成相同类型,再做比较:

  • 当比较「对象(这里[]是数组,属于对象类型)」和「字符串」时,首先会把对象转换为原始值:数组的toString()方法会返回空字符串(空数组转字符串的结果就是"")。
  • 现在两边都是字符串类型了,变成"" == "",结果自然是true。

如果换成严格相等[] === "",因为两边类型(数组vs字符串)不同,结果会直接是false——这也是为什么日常开发里更推荐用===来避免类型转换带来的意外。

内容的提问来源于stack exchange,提问作者Nisba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:47:07