【发布时间】:2016-02-28 12:41:24
【问题描述】:
谁能解释一下,为什么! 和== 将[] 的类型转换为布尔值:
![] // false
!0 // true
[] == 0 // true
!0 == ![] // false
同样的悖论:
0 == Boolean ([]) // false
[] == false // true
Boolean([]) // true
[] == Boolean([]) // false
【问题讨论】:
-
更糟糕的是——
[] == []也是false! :P -
@Boaz 没什么神奇的
[] == []。对象通过引用进行比较,由于[]和[]创建了2 个不同的数组,所以它是false。 -
就像这里所有其他询问
==的看似奇怪行为的问题一样,您会发现==不是转换为布尔值,而是使用称为抽象相等比较算法的更复杂的算法来转换类型直到它们匹配。 -
...就目前而言,我真的不知道你在问什么,因为我不知道你的期望是什么。您问题中的所有结果对我来说都是有意义的。
-
@EduardFlorinescu:首先,不要做傻事。我从未声称完全了解 JS,也不需要为了理解这些基础知识。其次,你没有解释为什么你认为结果应该不同。第三,这些行为被很好地记录了很多次。您不会得到与其他数百个正确答案不同的答案。第四,不要做傻事。
标签: javascript