非常奇怪的行为,比较未定义和错误

Very strange behaviour comparing undefined and false

本文关键字:比较 未定义 错误 非常      更新时间:2023-09-26

我在控制台中有以下输出:

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不是真的吗?

是的。 !!x 返回 x。 !undefined强制undefined布尔值,false然后找到!((bool)undefined) = !false,如果我们使用C++强制符号。 所以!!undefined给出!!((bool)undefined) = !!(false) = !true = false ,而不是undefined

Undefined不是boolean类型,就像false一样,所以当你直接比较它们时,它们并不相等。

有关其他比较陷阱,请参阅此处。

typeof(undefined)
"undefined"
typeof(false)
"boolean"
console.log(!undefined)
// true
console.log(!false)
// true
console.log(!!undefined)
// false
console.log(!!false)
// false