JavaScript IF语句的计算结果不正确-为什么?

JavaScript IF语句的计算结果不正确-为什么?,javascript,html,dom,if-statement,logic,Javascript,Html,Dom,If Statement,Logic,我对客户购买的许可证数量与使用的许可证数量进行了非常简单的逻辑测试: 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('tec

我对客户购买的许可证数量与使用的许可证数量进行了非常简单的逻辑测试:

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如何计算为真?

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

因为.val返回字符串4'确实大于或等于'100'。如果您知道为了进行比较,这些值始终是数字,请首先将其转换为数字

if (+tech_lic >= +tech_allow)
这样做:-

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

您将它们作为字符串进行计算,因此4大于100

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

var tech_lic = parseInt($("#technician_lic").val(), 10);
var tech_allow = parseInt($("#technician_lic_allow").val(), 10);
不是4>=100是真的,而是4>=100是真的

您得到的值是字符串,因此它们将按词汇进行比较,而不是按数字进行比较

将值解析为数字:

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

这是一种隐式转换。从性能角度看,隐式转换与使用parseInt所花费的时间相同,因此它是一个有效的强制转换。但要小心这样的链接,如果对一行中的多个项目使用隐式强制转换,则某些括号可能会有很大的作用。@TravisJ有些括号可能会有很大的作用是什么意思?@ExplosionPills-以确保值之间没有连接。例如,+tech_lic>=+tech_allow++tech_min将变得相当松散,因此其中的一些括号将确保导出正确的值+tech_lic>=+tech_allow++tech_min。这对您来说并不是一个注释,对其他可能希望同时对一行中的多个值使用它的人来说也不是一个注释。@TravisJ它不是隐式转换,它将表达式转换为一个数字,它与使用数字一样显式…。而且+x++y不可能被解释为+x++y之外的任何东西,除非是由人来解释,ECMAScript语法并没有那么草率-你明白了-一个来自Rails模型的值肯定是一个整数-但另一个是从COUNT返回的-无论如何,我添加到了_I,以强制我的值在我的视图中为整数,并让JavaScript保持原样-工作。我给出了正确的答案,因为它们是字符串,尽管我用另一种方式解决了这个问题——这是一个巧妙的技巧。if语句的计算是正确的。这是一个词典比较,因此如果4大于100,则返回true。