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

JavaScript如何判断值非数字?使用==NaN判断失效是什么原因?

问题原因

  • JavaScript中NaN是唯一和自身不相等的特殊值,任何值与NaN做==、===比较的结果都为false,因此你写的if (user_input == NaN)判断条件永远不会成立,不管输入是否有效都会进入else分支输出"its a number"。
  • Number()转换不符合数字格式的字符串时确实会返回NaN,但错误的判断逻辑导致你无法识别到返回的NaN。

修复方法

你可以任选以下一种方式修正判断逻辑:

  1. 使用内置isNaN()方法
let user_input = Number(document.querySelector("#user_input").value);
if (isNaN(user_input)) {
    console.log("its not a number");
} else {
    console.log("its a number");
}
  1. 使用更严谨的Number.isNaN()方法(不会自动做类型隐式转换,判断更精准)
let user_input = Number(document.querySelector("#user_input").value);
if (Number.isNaN(user_input)) {
    console.log("its not a number");
} else {
    console.log("its a number");
}
  1. 利用NaN不等于自身的特性直接判断
let user_input = Number(document.querySelector("#user_input").value);
if (user_input !== user_input) {
    console.log("its not a number");
} else {
    console.log("its a number");
}

补充说明:普通isNaN()会先尝试将传入值转为数字再判断,会出现isNaN('')返回false、isNaN('123')返回false的情况,如果需要严格校验用户输入为纯数字,可额外搭配正则/^\d+$/校验输入字符串格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:03