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
相关产品推荐
相关产品推荐

