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