JavaScript奇偶校验中%取余运算符两种判断写法效果一致的原因
JavaScript奇偶校验两段代码等价原因说明
你给出的两段代码如下:
// 第一段:直接用取余结果作为判断条件 var number = parseInt(prompt("even or odd number checker")); if (number % 2) { alert("odd"); } else { alert("even"); }
// 第二段:显式判断余数等于1 var number = parseInt(prompt("even or odd number checker")); if (number % 2 == 1) { alert("odd"); } else { alert("even"); }
正整数场景下等价的核心原因
两者运行效果一致完全是因为JavaScript的隐式布尔转换规则和正整数取余的结果特性:
- 正整数对2取余的结果只有两种:奇数得到
1,偶数得到0 - if语句会自动将括号内的表达式结果转为布尔值:
1会被转为true,0会被转为false,和显式判断==1的返回结果完全匹配,所以正整数输入时两段代码表现没有差异。
两者的实际逻辑差异
这两段代码并不是完全等价的,当输入为负奇数时会出现判断结果不一致的问题:
比如输入-3时:
- 第一段代码中
-3 % 2返回-1,隐式转布尔为true,会正确提示奇数 - 第二段代码中
-3 % 2 == 1返回false,会错误提示偶数
如果要做兼容正负整数的奇偶校验,更稳妥的写法是判断余数是否不等于0:if (number % 2 !== 0)
内容的提问来源于stack exchange,提问作者troublesome naw
相关产品推荐
相关产品推荐

