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

为何undefined加11得NaN却触发'other'分支?JS问题咨询

为什么判断NaN时===不生效?

你遇到的问题核心是NaN的特殊特性:在JavaScript里,NaN是唯一一个不等于自身的值,所以用严格相等运算符===去判断变量 === NaN永远会返回false,这就是你的代码进入else分支的原因。

拆解你的代码细节:

  • undefined + 11会触发隐式类型转换,undefined被转成NaN,所以NaN + 11的结果还是NaN,这也是你用console.log看到number值为NaN的原因。
  • 但if (number === NaN)这个条件永远为false——因为NaN === NaN本身就等于false,自然不会进入第一个分支;第二个分支number === 11显然不成立,所以最终走到else输出other。

要正确判断一个值是不是NaN,有两种常用方法:

  1. Number.isNaN():ES6新增的方法,只会严格判断传入的值是否为NaN,不会做类型转换,推荐使用:

    const number = undefined + 11;
    if (Number.isNaN(number)) {
      document.write("NaN");
    } else if (number === 11) {
      document.write("11");
    } else {
      document.write("other");
    }
    

    这段代码会正确输出NaN。

  2. isNaN():旧方法,它会先把传入的参数转成数值类型再判断是否为NaN,如果传入非数值类型(比如字符串)可能出现误判,比如isNaN("abc")会返回true(因为"abc"转成数值是NaN),使用时需注意场景。

总结:永远不要用===或==去判断NaN,必须用专门的判断方法。

内容的提问来源于stack exchange,提问作者정지은

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:02:02