为什么JavaScript中“”==[null]为真?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我知道JavaScript有许多疯狂的结果和类型之间的比较,但我不完全明白为什么。今天遇到这个。

为什么

"" == [null]

结果是true

提问于
用户回答回答于

“抽象平等比较算法”有很多地方,但这里的重要的一条是这样的:

如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y)。

因此,因为""是一个字符串并且[null]是一个对象,所以我们必须先[null]通过调用转换为一个字符串ToPrimitive([null])。当要求将Object实例转换为原始值时,这是一个内部操作,如下所述:

返回对象的默认值。通过调用对象的[[DefaultValue]]内部方法来检索对象的默认值,并传递可选的提示PreferredType。本规范针对8.12.8中的所有本地ECMAScript对象定义[[DefaultValue]]内部方法的行为。

现在,[[DefaultValue]]内部操作将调用.toString()该对象并返回该值。试用[null].toString()你的浏览器控制台:

> [null].toString()
""

用户回答回答于

这是根据JavaScript 的类型转换规则。规则#8:

如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y)。

所以比较是在两者之间,x = ""y = [null]转换为一个字符串使用ToPrimitive。用一个空元素转换数组会导致一个空字符串(因为Array.toString()返回逗号分隔的值列表),因此它们的计算结果相同。

扫码关注云+社区