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

jQuery中数值比较逻辑异常:预期结果与实际不符

问题原因与解决方案

哦,这个坑我踩过好多次——你遇到的是字符串与数字比较的典型陷阱!

核心原因:val()返回的是字符串类型

jQuery的val()方法从输入框获取的值,本质上是字符串,哪怕你输入的是数字。当你直接用>=这类比较运算符对比两个字符串时,JavaScript不会自动把它们转成数字,而是按字符的ASCII码值逐个对比:

  • 拿你的例子来说,price是"100",milestone是"90"
  • 对比第一个字符:"1"的ASCII码是49,"9"是57,49 < 57
  • 所以JavaScript直接判定"100" < "90",这就导致你的price >= milestone条件不成立,反而进入else分支。

解决方案:先把字符串转成数字

只要把获取到的值转换成数字类型,就能正常按数值大小比较了,这里给你几种常用的转换方式:

1. 整数场景用parseInt()(记得加第二个参数10,避免八进制坑)

var price = parseInt($("input[name=bid_price]").val(), 10);
var milestone = parseInt($("input[name=initial_price]").val(), 10);

2. 小数场景用parseFloat()

var price = parseFloat($("input[name=bid_price]").val());
var milestone = parseFloat($("input[name=initial_price]").val());

3. 快速转换用一元加号+

这是最简洁的方式,适合确定输入是数字的情况:

var price = +$("input[name=bid_price]").val();
var milestone = +$("input[name=initial_price]").val();

额外建议:处理非数字输入

如果用户可能输入非数字内容,建议加个NaN判断,避免出现异常:

var price = parseInt($("input[name=bid_price]").val(), 10) || 0;
var milestone = parseInt($("input[name=initial_price]").val(), 10) || 0;

修改后的完整代码

var price = parseInt($("input[name=bid_price]").val(), 10) || 0;
var milestone = parseInt($("input[name=initial_price]").val(), 10) || 0;

if(price >= milestone) {
    console.log('True');
} else {
    console.log('False');
}

这样再测试100和90的情况,就会正常输出True啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:12