JavaScript if条件中&&与大于运算符的运行逻辑疑问
JavaScript条件判断逻辑问题解答
你写的if(dolphins && koalas > minimumScore)实际运行规则
- JavaScript中比较运算符优先级高于逻辑运算符,所以这行代码会被自动拆解为两个独立判断,等价于:
if( Boolean(dolphins) && (koalas > minimumScore) ) - 第一步会判断
dolphins对应的布尔值:只要dolphins的得分是不为0的正数,都会被转换为true - 第二步才会判断
koalas > minimumScore是否成立 - 只有两个判断的结果都为
true时,才会进入if分支,否则进入else分支
认知误区说明
你觉得逻辑和预期不符的核心原因,是错误省略了每个变量和minimumScore的比较逻辑:
你原本以为
dolphins && koalas > minimumScore是「dolphins和koalas都大于最低分」,但实际它的含义是「dolphins为真值,且koalas大于最低分」,和你预想的逻辑完全不同。
同理你之前用||时写的dolphins || koalas > minimumScore,实际含义是「dolphins为真值,或者koalas大于最低分」,只要dolphins得分不为0,不管两队得分多低,整个条件都会返回true,所以永远进不了else分支。
你现在把||换成&&后看起来符合预期,只是当前测试用例的巧合:比如当dolphins得分120、koalas得分90时,按照你的需求应该进入if分支判断胜负,但按照你现在的写法,会因为koalas > 100不成立直接进入else分支,输出no team won,和预期完全不符。
正确写法
- 如果要判断任意一队得分高于最低分,正确写法:
if(dolphins > minimumScore || koalas > minimumScore) - 如果要判断两队得分都高于最低分,正确写法:
if(dolphins > minimumScore && koalas > minimumScore)
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

