如何为阶乘函数添加简洁的非数字参数校验并返回null?
阶乘函数的参数校验实现方案
需求说明
编写阶乘函数时,需添加校验逻辑:当传入非数字类型(如符号@#!、字母s/z等)时返回null,要求校验逻辑简洁易读,能识别非数字参数并立即终止程序返回null。
当前代码
function factorial(n){ let num = Number(n); // 每次将num减1并推入数组 let miniaturizedNum = []; for (num; num > 0; num--){ miniaturizedNum.push(num); } // 将finalResault与数组中的数字相乘,初始值设为1是因为0乘任何数都为0 let finalResault = 1; for (let i = 0; i < miniaturizedNum.length; i++){ finalResault *= miniaturizedNum[i]; } return finalResault; }
解决方案
我们可以在函数开头添加集中式的参数校验,一旦不符合条件立即返回null,同时优化原阶乘的实现逻辑,让代码更简洁高效:
function factorial(n){ // 参数校验:非有效非负整数直接返回null if (typeof n !== 'number' || !Number.isInteger(n) || n < 0) { return null; } let finalResult = 1; // 直接循环相乘,无需额外数组存储 for (let i = n; i > 0; i--) { finalResult *= i; } return finalResult; }
校验逻辑说明
typeof n !== 'number':直接排除字符串、符号、布尔值等非数字原始类型!Number.isInteger(n):排除非整数的数字(如3.5、NaN、Infinity)n < 0:阶乘仅定义在非负整数范围内,负数直接返回null
额外优化点
原代码中用数组存储所有递减数字再相乘的逻辑可以简化,直接在循环中完成累乘,减少内存占用,提升执行效率。
内容的提问来源于stack exchange,提问作者real_AliReza
相关产品推荐
相关产品推荐

