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

下拉框数值与0严格相等比较返回false问题求助

问题分析与解决方案

哈哈,这个坑我刚踩过没多久!你遇到的问题本质是类型不匹配,跟代码逻辑无关,是jQuery的val()方法的小细节搞的鬼。

核心原因

jQuery的val()方法返回的是字符串类型的值,哪怕你的下拉框选项值是数字。也就是说,$("#children").val()拿到的其实是字符串"0",而不是数字0。你用严格相等运算符===判断的时候,它会同时比较值和类型——"0"和0类型不同,所以numChildren === 0永远是false,哪怕控制台打印出来看起来都是0(因为字符串拼接时会自动转成字符串显示,看不出类型差异)。

你可以在console.log里加一行类型检查验证:

console.log(typeof numChildren, typeof numAdults); // 会输出 string string

解决办法

有几种稳妥的方式修复这个问题:

  1. 把值转成数字类型(推荐)
    用parseInt()(处理整数)或者Number()把字符串转成数字,注意parseInt要加第二个参数10指定十进制,避免进制解析错误:

    $("#Discounts").on("click", function () { 
        let numChildren = parseInt($("#children").val(), 10); 
        let numAdults = parseInt($("#adults").val(), 10); 
        console.log("Adults: " + numAdults + "\nChildren: " + numChildren); 
        console.log(numChildren === 0 && numAdults === 0); 
        if (numChildren === 0 && numAdults === 0) { 
            alert("You must select at least one person!"); 
            $("#children").val(1); 
        } 
    });
    
  2. 直接和字符串"0"比较
    如果不想转类型,也可以直接判断字符串是否等于"0",但这种方式不太符合变量命名(num开头应该是数字类型),不太推荐:

    if (numChildren === "0" && numAdults === "0") {
        // ... 操作
    }
    
  3. 使用宽松相等==(不推荐)
    宽松相等会自动做类型转换,但容易隐藏其他隐式转换的坑,比如"" == 0也会返回true,所以不建议用这种方式。

内容的提问来源于stack exchange,提问作者T.Cahill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:36