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

为什么我的JavaScript查找奇数的程序在起始值为5时运行异常?

问题根因

  • prompt() 函数的返回值默认为字符串类型,代码中未做类型转换就直接用于循环判断和运算,是异常的根本原因。
  • 输入起始值1、结束值10时正常运行的逻辑:
    两个输入值均为字符串,首次循环判断 i <= eValue 等价于 "1" <= "10",按字符串字典序比对结果为真。进入循环后执行 i++,递增运算符会自动将字符串类型的i转换为数值类型,后续判断变为数值和字符串的比对,JS会自动把字符串"10"转为数值10,逻辑刚好符合预期。
  • 输入起始值5时无法运行的逻辑:
    首次循环判断等价于 "5" <= "10",按字符串字典序比对时,优先取首位字符的Unicode编码比较,"5"的编码为53,"1"的编码为49,直接判定"5" > "10",循环条件不成立,不会进入循环执行,最终得到空数组。

修复方案

将两个prompt的返回值显式转换为数值类型即可,可根据需要补充非数字输入的校验逻辑,参考代码如下:

var odd = [];
// 也可以用+号简写转换:var sValue = +prompt("start")
var sValue = Number(prompt("start"));
var eValue = Number(prompt("end"));

// 可选:非数字输入校验
if (isNaN(sValue) || isNaN(eValue)) {
  alert("请输入合法的数字");
} else {
  for (var i = sValue; i <= eValue; i++) {
    if (i % 2 !== 0) {
      odd.push(i);
    }
  }
  alert(odd);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:01