我知道JavaScript在类型之间进行比较会产生很多疯狂的结果,尽管我不完全理解为什么。今天遇到了这个。
为什么
"" == [null]
true
在JavaScript中评估为?
多亏@Qantas,更多的Javascript平等娱乐活动:
在“抽象平等比较算法”有很多地方,但这里的重要的一条是这样的:
如果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()
""
那里有。
编辑:为什么是[null].toString()
一个空字符串?因为.toString()
对Array实例的操作始终仅调用.join()
,并且始终为null
和undefined
值生成一个空字符串。因此,一个数组的null
结尾最终只是一个空字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句