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

JavaScript函数如何仅接受数值参数及修复oddeven非数字判断问题

问题解决:奇偶判断函数的NaN处理与参数类型限制

一、修复"asd"输出错误的问题

你的代码里调用oddeven("asd")时输出"asd is odd",原因是:parseInt("asd")会返回NaN(非数字),而NaN % 2的结果还是NaN,在JS里NaN != 0会被判定为true,所以会进入"奇数"的分支。

要修复这个问题,必须先判断转换后的结果是否为有效数字,再进行奇偶判断。修改后的代码如下:

function oddeven(input) {
  const num = parseInt(input);
  // 先检查是否为有效数字
  if (isNaN(num)) {
    document.write(`${input} is not a number<br>`);
    return;
  }
  // 再判断奇偶
  if (num % 2 === 0) {
    document.write(`${num} is even<br>`);
  } else {
    document.write(`${num} is odd<br>`);
  }
}

// 测试调用
oddeven(2);
oddeven(1);
oddeven(10);
oddeven(7);
oddeven("asd"); // 现在会输出"asd is not a number"

如果需要严格校验输入是完整的数字字符串(比如拒绝"123asd"这种部分含数字的情况),可以用Number()代替parseInt,或者配合正则判断:

function oddeven(input) {
  // 正则匹配正负整数,确保输入是纯数字
  if (!/^-?\d+$/.test(input)) {
    document.write(`${input} is not a number<br>`);
    return;
  }
  const num = Number(input);
  if (num % 2 === 0) {
    document.write(`${num} is even<br>`);
  } else {
    document.write(`${num} is odd<br>`);
  }
}

二、让函数仅接受数值类型作为参数

JS是弱类型语言,无法强制限制参数类型,但可以在函数开头手动做类型校验,不符合条件则直接提示或终止执行。这里提供两种常用方式:

方式1:检查基本类型+整数校验

如果要求参数必须是整数类型,可以这样写:

function oddeven(num) {
  // 第一步:检查是否为数值类型
  if (typeof num !== 'number') {
    document.write(`${num} is not a number<br>`);
    return;
  }
  // 第二步:检查是否为整数(奇偶判断通常针对整数)
  if (!Number.isInteger(num)) {
    document.write(`${num} is not an integer<br>`);
    return;
  }
  // 第三步:判断奇偶
  if (num % 2 === 0) {
    document.write(`${num} is even<br>`);
  } else {
    document.write(`${num} is odd<br>`);
  }
}

// 测试
oddeven(2);       // 输出"2 is even"
oddeven("asd");   // 输出"asd is not a number"
oddeven(3.5);     // 输出"3.5 is not an integer"

方式2:抛出错误强制终止

如果希望非法参数直接中断代码执行(而不是提示),可以抛出错误:

function oddeven(num) {
  if (typeof num !== 'number' || !Number.isInteger(num)) {
    throw new Error(`参数必须是整数类型,当前输入:${num}`);
  }
  if (num % 2 === 0) {
    document.write(`${num} is even<br>`);
  } else {
    document.write(`${num} is odd<br>`);
  }
}

// 合法调用正常执行,非法调用会抛出错误
oddeven(2);
oddeven("asd"); // 控制台报错:参数必须是整数类型,当前输入:asd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:06:43