JavaScript IF语句计算TRUE错误-为什么

JavaScript IF statement evaluating TRUE incorrectly - why?

本文关键字:错误 为什么 TRUE 计算 IF 语句 JavaScript      更新时间:2023-09-26

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

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当我点击"add"按钮时:

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
}