繁体   English   中英

JavaScript IF语句对TRUE的评估不正确-为什么?

[英]JavaScript IF statement evaluating TRUE incorrectly - why?

对于客户购买的许可证数量与使用的数量,我有一个非常非常简单的逻辑测试:

else if(utype == "3"){
           var tech_lic = $("#technician_lic").val();
           console.log('tech lic = ' + tech_lic)
           var tech_allow = $("#technician_lic_allow").val();
           console.log('tech allow = ' + tech_allow)
           if(tech_lic >= tech_allow)
            {
              alert("You must purchase more licenses to create this Technician");
              return false;
            }

我在console.log语句中尝试调试它-通常它们不存在。

单击“添加”按钮时的Console.log:

tech lic = 4    application.js:262
tech allow = 100    application.js:264

然后,在窗口中点击“您必须购买更多许可证”警报。

有没有搞错?

4> = 100如何评估为真?

因为.val返回一个字符串。 '4'确实大于或等于'100' 首先将值转换为数字(如果您知道出于比较的目的它们始终是数字)。

if (+tech_lic >= +tech_allow)

您正在将它们评估为字符串,因此“ 4”大于“ 100”。

在比较之前,您需要将它们转换为整数:

var tech_lic = parseInt($("#technician_lic").val(), 10);
var tech_allow = parseInt($("#technician_lic_allow").val(), 10);

字符串“ 4”大于“ 100”,而数字4小于100。

不是4 >= 100是真实的,而是"4" >= "100"是真实的。

您获得的值是字符串,因此将按词法而非数字进行比较。

将值解析为数字:

var tech_lic = parseInt($("#technician_lic").val(), 10);
var tech_allow = parseInt($("#technician_lic_allow").val(), 10);

这样做:

if(Number(tech_lic) >= Number(tech_allow))
{
   // Do your stuff
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM