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

为什么我的JavaScript出现NaN问题,下述JS函数为何未返回0?

JS函数未返回0的问题排查

核心问题代码

let letters = [ 3, 1, "c" ];

const easySolution = function(input){
    if(Math.max(...input) === NaN){
        return 0;
    }else{
        return Math.max(...input);
    }
}
console.log(easySolution(letters));

问题根因

  • NaN的等值判断逻辑错误:NaN是JavaScript中唯一和自身不相等的特殊值,NaN === NaN的执行结果为false,因此代码中的判断条件Math.max(...input) === NaN永远不会成立,永远不会进入返回0的分支。
  • Math.max返回NaN的原因:当Math.max接收的参数中存在无法转换为有效数字的值时,整体返回结果为NaN。示例数组中存在字符串"c",转换为数字的结果是NaN,因此Math.max(...letters)最终返回NaN,而因为判断条件失效,函数直接把这个NaN作为返回值输出。

修复方案

将NaN的判断逻辑替换为Number.isNaN()方法,同时可以将Math.max的结果存入变量避免重复计算,修改后代码如下:

let letters = [ 3, 1, "c" ];

const easySolution = function(input){
    const maxResult = Math.max(...input);
    // 用Number.isNaN判断值是否为NaN,该方法不会做隐式类型转换,判断结果更准确
    if(Number.isNaN(maxResult)){
        return 0;
    }
    return maxResult;
}
console.log(easySolution(letters)); // 输出0,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 21:45:04