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

斯科特·斯塔福德(Scott Stafford):

我知道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(),并且始终为nullundefined生成一个空字符串因此,一个数组的null结尾最终只是一个空字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么-1> null在PHP中为true

为什么“ true” == true在JavaScript中显示为false?

为什么!{} [true]在JavaScript中评估为true?

为什么在Javascript中,(!+ [] + [])为'true'和(false + [])为'false'?

为什么EditText的值(不为null)始终为true?

为什么我的JavaScript中的document.body为null?

为什么在JavaScript中null + null = 0

为什么在JavaScript中“〜undefined”为-1?

为什么{} == {}在JavaScript中为假

为什么 Boolean([]) 在 JavaScript 中为真?

为什么在JavaScript中typeof(null)=='object'?

为什么在argparse中,“ True”始终为“ True”?

为什么ViewPager方法中为null?

JavaScript:空数组,[]在条件结构中评估为true。为什么是这样?

为什么“” <{}评估为true?

为什么在MySQL中为null <> null = null

为什么`isFinite(null)=== true`?

为什么JavaScript负数不总是为true或false?

为什么无法在JavaScript中通过引用传递的对象设置为null?

为什么不能将“ this”设置为null以删除Javascript中的树节点?

在Javascript中,为什么在元素上设置externalHTML会将其parentNode设置为“ null”?

为什么JavaScript中的“ Infinity == Infinity”变为true?

为什么 [NaN].includes(NaN) 在 JavaScript 中返回 true?

为什么在javascript“100”<“5”中返回true?

为什么“ range(2)== True中的1”评估为False?

为什么在bash中[“ $ foo” ==“ $ bar”]始终为true?

为什么在R中“ <integer>” == <integer>为true

为什么NULL = NULL在SQL Server中评估为false

在JavaScript中,为什么~~ Infinity求值为0?