You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组求和中sum%2与sum%2==0的区别及取余运算符疑问

关于JavaScript取余运算符(%)的布尔判断逻辑问题

我在解决CodeWars问题时,对取余运算符(%)的工作原理产生了困惑,想了解表达式10 % 2与9 % 2对应的布尔判断逻辑。

原CodeWars题目说明

给定一个整数列表,判断其元素之和是奇数还是偶数,返回字符串"odd"或"even";若输入数组为空,则视为[0]。

以下两种解决方案均可正常运行:

function oddOrEven(array) {
  let sum = array.reduce( (acc, c) => acc + c, 0 )
  return sum % 2 ? "odd" : "even"
}
function oddOrEven(array) {
  let sum = array.reduce( (acc, c) => acc + c, 0 )
  return sum % 2 == 0 ? "even" : "odd"
}

核心疑问

像sum % 2这样的取余表达式到底返回什么?根据三元表达式的逻辑,第一个解决方案能正常工作意味着当存在余数时,sum % 2会被视为true,这是否正确?


解答

首先明确JavaScript中取余运算符的返回值:

  • 10 % 2的结果是0,因为10能被2整除,没有余数;
  • 9 % 2的结果是1,因为9除以2商4余1。

然后要理解JavaScript的布尔类型隐式转换规则:在条件判断场景(比如三元表达式的条件位置)中,非布尔值会被自动转换为布尔值:

  • 数字0会被转换为false;
  • 任何非0的数字(包括1、-1、2等)都会被转换为true。

基于这两点,就能解释两个解法的逻辑:

  1. 第一个解法的逻辑:
    • 当sum是奇数时,sum % 2返回1(非0值),被转换为true,因此三元表达式返回"odd";
    • 当sum是偶数时,sum % 2返回0,被转换为false,因此返回"even",完全符合题目要求。
  2. 第二个解法的逻辑:
    • 直接判断取余结果是否等于0,等于0说明sum是偶数,返回"even";否则sum是奇数,返回"odd",逻辑更直观直白。

你的判断是正确的:当存在余数(即sum为奇数,余数为1)时,sum % 2会被视为true,这正是第一个解法能正常运行的核心原因。

内容的提问来源于stack exchange,提问作者Chris Nelson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:53:19