JavaScript中含undefined的逻辑表达式布尔值异常行为咨询
问题解析:为什么
undefined和0的相等判断结果是false 你核心的误区是混淆了单个值的布尔转换和两个值的相等性判断这两个完全独立的逻辑:布尔转换是把单个值转成true/false,而相等判断是遵循专门的规则直接比较两个值,不是先把它们都转成布尔再对比。
1. 严格相等===的判断逻辑
===是严格相等,判断规则非常直接:
- 第一步先比较两个值的类型,类型不同直接返回
false - 类型相同时,再比较值是否相等
你的代码里:
varUndefined是undefined类型,0是Number类型,类型完全不同- 所以
varUndefined === 0的结果是false,套Boolean()后自然还是false
2. 抽象相等==的判断逻辑
==是抽象相等,会做类型转换,但转换规则不是统一转成布尔值,而是遵循ECMAScript的专门规则:
undefined和null互相相等(undefined == null返回true)undefined和null与其他任何类型的值比较,结果都是false
所以varUndefined == 0的结果是false,转布尔后依然是false
补充说明
你测试的Boolean(undefined)返回false是对的,但这只是单个值的布尔转换结果,和两个值的相等判断没有关系。相等判断不会先把两个值都转成布尔再比较,比如false == 0会返回true,这是因为抽象相等规则里会把布尔值转成数字(false转成0),而不是因为两者转布尔都是false。
内容的提问来源于stack exchange,提问作者Codeit
相关产品推荐
相关产品推荐

