我在控制台中有这个输出:
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
不是真的吗?
答案 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