JavaScript实现水仙花数判断返回布尔值报错排查
问题根因
- 函数入参
value是Number类型,该类型不存在length属性,也无法通过下标索引直接读取每一位数字,原代码中value.length取值为undefined,循环逻辑完全无法正常执行。 - 原代码未做类型转换就直接按下标取位,拿到的不是有效数字值,幂运算计算逻辑完全失效。
- 逻辑判断使用宽松相等
==存在隐式类型转换风险,可能出现误判。
修正代码
function narcissistic(value) { const numStr = String(value); const digitCount = numStr.length; let powerSum = 0; for (let i = 0; i < digitCount; i++) { powerSum += Math.pow(Number(numStr[i]), digitCount); } return powerSum === value; }
逻辑说明
- 先将传入的数值转为字符串,即可通过
length拿到总位数,也可以通过下标逐位取出单个数字字符 - 逐位取出的字符转为Number类型后,以总位数为指数做幂运算,累加得到幂和
- 直接返回幂和与原始值的全等比较结果,天然是布尔类型,无需额外写if/else分支返回true/false,符合题目要求
测试用例验证
- 入参
153:1³+5³+3³ = 1+125+27 = 153,返回true - 入参
123:1³+2³+3³ = 36 ≠ 123,返回false - 入参
9474:9⁴+4⁴+7⁴+4⁴ = 9474,返回true
内容的提问来源于stack exchange,提问作者Tirtharaj Roy
相关产品推荐
相关产品推荐

