Javascript与空数组和布尔值的比较

Javascript与空数组和布尔值的比较,javascript,Javascript,正如您在中所看到的,javascript平等传递性很奇怪 我了解表格的大部分结果,但我对以下比较有疑问: [] == true // false [] == false // true !![] == true // true !![] == false // false 而且: if ([]) { // this code will run } if (!![]) { // and of course this too } 为什么??这是另一个非常糟糕的部分吗?这有一个合

正如您在中所看到的,javascript平等传递性很奇怪

我了解表格的大部分结果,但我对以下比较有疑问:

[] == true // false
[] == false // true
!![] == true // true
!![] == false // false
而且:

if ([]) {
    // this code will run
}

if (!![]) {
    // and of course this too
}

为什么??这是另一个非常糟糕的部分吗?这有一个合理的解释吗?

@Tomalak:我敢说你可以在控制台中运行
[]==false
:-p当使用
=
时,它需要将两个操作数转换为同一类型。因此,它将
[]
转换为字符串(
'
),然后转换为数字(
0
)。然后它将
false
转换为一个数字(
0
),然后比较它们。我仍在试图弄明白为什么
!![]
为真,而
[]==false
也为真。查看真实和虚假的比较,您忘记了JavaScript是动态键入的:
!![]=[]
为false。请使用
==
length
typeof foo===“undefined”
。这个问题(以及JavaScript愚蠢的真值表)的有趣之处在于
(!![])==([]==false)
是真的:)