非常奇怪的行为,比较未定义和错误
Very strange behaviour comparing undefined and false
我在控制台中有以下输出:
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
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 未定义===未定义比较什么
- 如何在不获得引用错误的情况下将不存在的JavaScript对象与未定义的对象进行比较
- 无法循环访问比较文本值的数组,使用量角器未定义的结果
- 与“未定义”进行比较是否仍会进行全局范围查找
- 非常奇怪的行为,比较未定义和错误
- 带有护照的节点:比较密码抛出错误未定义不是一个函数,当它返回返回完成(null,用户);
- 比较数组函数返回未定义
- 与-1或未定义进行比较不起作用,无论是使用==还是===
- null和未定义的不一致比较
- 如果comparison(if语句)比较未定义的值,则返回true
- 比较未定义/null/NaN与ActionScript中的number
- 量角器,JavaScript 比较:无法读取未定义的属性“forEach”
- TypeError: Cannot read property '0'比较数组时未定义的
- 比较JavaScript中未定义的值
- 将日期与NaN和未定义进行比较
- TypeOf未定义,而不是与未定义进行比较
- 为什么我得到一个未定义的变量?将变量与未定义进行比较时出错
- 使用下划线比较两个未定义值的对象
- 数组越界:与未定义的比较,或长度检查