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

如何为阶乘函数添加简洁的非数字参数校验并返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:00:47