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

如何在函数中限定参数必须为数字?编写参数校验防御代码

问题解答与代码修正

问题1:如何在函数中定义参数必须为数字?

在JavaScript中没有原生语法强制参数类型,但可以通过类型校验逻辑实现类似效果:

  • 用typeof操作符判断参数类型是否为'number',但typeof NaN也会返回'number',如果要排除NaN、Infinity这类非有效数字,可搭配Number.isFinite()方法做进一步校验。
  • 若参数不符合要求,直接终止函数执行并给出提示,避免后续逻辑出错。

问题2:如何编写防御性代码,检查参数是否为数字,若不是则在控制台输出‘it must be a number’?

在函数最开头加入参数校验逻辑,先判断参数是否为有效数字,不符合则输出指定提示并终止函数(用return),防止后续逻辑基于无效参数运行。

修正后的getDiscount函数

原代码存在类型判断错误、条件逻辑混乱等问题,以下是修复并添加防御性校验后的版本:

function getDiscount(taxBoolean, guests) {
    // 校验guests是否为有效数字
    if (typeof guests !== 'number' || !Number.isFinite(guests)) {
        console.log('it must be a number');
        return;
    }

    // 校验数字范围(0到30之间)
    if (guests <= 0 || guests >= 30) {
        console.log('the second argument must be a number between 0 and 30');
        return;
    }

    getPrices(taxBoolean);

    let discount = 0;
    if (guests < 5) {
        discount = 5;
    } else {
        discount = 10;
    }

    console.log(`Discount is : $${discount}`);
}

关键修正点说明

  • 修复类型判断错误:将错误的typeof(guests) == 0改为typeof guests !== 'number' || !Number.isFinite(guests),确保只接受有效数字。
  • 拆分校验逻辑:把数字范围校验单独提取,避免原代码中用错误变量判断范围的问题。
  • 添加终止逻辑:校验不通过时用return终止函数,避免后续逻辑基于无效参数执行。
  • 简化分支逻辑:因guests >=5是唯一的其他情况,去掉冗余的else if。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:15:34