比较undefined和false非常奇怪的行为

时间:2012-06-11 15:18:44

标签: javascript comparison logic comparison-operators

我在控制台中有这个输出:

console.log((!undefined)==(!false)) // true (fine)
console.log((!!undefined)==(!!false)) // true (still fine)

据我所知,!!x==x,不是吗?

console.log((undefined)==(false)) // false

有谁能告诉我为什么这会返回false?

!!false==false!!undefined==undefined不是真的吗?

3 个答案:

答案 0 :(得分:5)

是。 !!x 返回x。 !undefined 强制 undefined 为布尔false,然后找到!((bool)undefined) = !false,如果我们使用C ++强制表示法。因此,!!undefined!!((bool)undefined) = !!(false) = !true = false,而不是undefined

答案 1 :(得分:0)

未定义不是boolean类型,例如false,因此当您直接比较它们时,它们不相等。

有关其他比较陷阱,请参阅here

typeof(undefined)
"undefined"

typeof(false)
"boolean"

答案 2 :(得分:0)

console.log(!undefined)
// true
console.log(!false)
// true
console.log(!!undefined)
// false
console.log(!!false)
// false