4

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

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

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

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

谁能告诉我为什么这返回错误?

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

4

3 回答 3

6

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

于 2012-06-11T15:23:35.943 回答
0

Undefined 不是boolean类型,false所以当你直接比较它们时,它们是不相等的。

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

typeof(undefined)
"undefined"

typeof(false)
"boolean"
于 2012-06-11T15:23:10.360 回答
0
console.log(!undefined)
// true
console.log(!false)
// true
console.log(!!undefined)
// false
console.log(!!false)
// false
于 2012-06-11T15:23:34.283 回答