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

为什么这段JavaScript代码的while循环会出现无限迭代无法终止的问题?

问题原因

核心原因:NaN的比较规则特殊

JavaScript中NaN是唯一不与自身相等的值,任何涉及NaN的相等/不等比较都会返回固定结果:

  • NaN == NaN 返回 false
  • NaN!= NaN 返回 true
    你写的判断条件parseInt(num[index])!= NaN永远为真,哪怕parseInt返回NaN,判断结果还是满足循环条件,循环会一直执行,甚至index越界变成负数后也不会停止。

额外逻辑说明

你的代码从数组末尾下标4开始向前遍历,当index走到1的时候,num[1]的*被parseInt处理得到NaN,但由于上述判断逻辑问题,条件不会触发终止,反而会继续把num[1]赋值为1,index继续减到0,再到-1、-2……最终进入死循环。

修复方案

使用专门判断NaN的API替换直接比较的逻辑,两种可选写法:

  1. 全局isNaN()函数(会自动做类型转换):
var num=["1","*","2","3","4"]
var index=4
var eachop=1;

while(!isNaN(parseInt(num[index]))){
    num[index]=eachop;
    index=index-1;
    console.log(index);
}
  1. 更严谨的Number.isNaN()(不会自动做类型转换,推荐):
while(!Number.isNaN(parseInt(num[index]))){
    num[index]=eachop;
    index=index-1;
    console.log(index);
}

修改后循环到*对应的下标1时,判断条件就会返回false,循环正常终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:06:04