FizzBuzz示例疑问:为何需使用相等运算符(== 0)?
为什么FizzBuzz代码里需要用
== 0? 嘿,这个问题问得特别到位!咱们一步步拆解清楚,你就能明白为啥== 0是这段代码里的关键了。
首先得搞懂取模运算符%的作用:x % y会返回x除以y之后的余数。比如:
- 当
x能被y整除时,余数是0,比如9 % 3 = 0、15 % 5 = 0; - 不能整除时,会返回一个大于0、小于
y的数,比如10 % 3 = 1、7 % 5 = 2。
而FizzBuzz的核心规则就是:
- 能被3整除的数 → 输出
fizz - 能被5整除的数 → 输出
buzz - 同时被3和5整除的数 → 输出
fizzbuzz - 都不满足的 → 输出数字本身
那怎么判断一个数“能被3整除”?答案就是看它除以3的余数是不是0!所以必须用x % 3 == 0这个条件——只有当余数为0时,这个条件才会返回true,触发对应的输出逻辑。
举几个实际例子你就懂了:
- 当
x=3时,3%3=0,3%3==0为true,所以进入第二个分支输出fizz; - 当
x=15时,15%3==0和15%5==0都为true,所以进入第一个分支输出fizzbuzz; - 如果去掉
==0,直接写if(x%3),那x%3返回的非零余数会被JS当作true,比如x=4时4%3=1,条件会错误成立,输出fizz,完全违背规则。
你提到有更简便的写法,确实存在!比如利用逻辑短路的技巧:
for(let x=1;x<101;x++) { console.log(`${x%3?'':'fizz'}${x%5?'':'buzz'}` || x) }
但这个写法的底层逻辑还是依赖“余数是否为0”——当x%3==0时,x%3返回0(在JS里被视为false),所以会取冒号后的'fizz';反之余数非零则取空字符串。本质上和原来的==0判断是一回事,只是写法更简洁而已。
内容的提问来源于stack exchange,提问作者Cody Tisheuar
相关产品推荐
相关产品推荐

