比较两个数字9 <10

sou*_*w93 2 jquery

我之前从未遇到过这个错误,每当我的jquery脚本比较数字9和10或99和100或999和1000与9 <10或99 <100或999 <1000我得到一个错误的结果时,我得到了错误是的.我该如何解决这个jquery错误?谢谢.

jQuery的:

interval = setInterval(function(){
                $.post('help/retrivetable.php', { tableimpulse : sessid } , 
                    function(watchaget) {
                        if (countcom < watchaget)
                        {
                            countcom = watchaget;
                            $.post('help/retrivetable.php', { newtableimpulse : sessid } , 
                                function(getit) {
                                    $("#chat").append("<p id="+countmsg+">"+getit+"</p>");
                                    var scrolldown = $('#chat')[0].scrollHeight;
                                    $('#chat').animate({scrollTop:scrolldown}, 200);
                            }); 
                        }
                }); 
            }, 50); 
Run Code Online (Sandbox Code Playgroud)

当countcom = 9并且watchaget = 10时,它应该输入if if,但我认为它们是相同的并且不会进入它.

Hub*_*ast 12

jQuery是Javascript.如果它是一个bug,它不是jQuery-Bug而是Javascript-Bug.(编辑:有关于这句话的讨论.阅读评论)

尝试此解决方案:

变量定义为字符串:

var a = "9";
var b = "10";
Run Code Online (Sandbox Code Playgroud)

此比较将重现您的结果:

if (a < b) ...
Run Code Online (Sandbox Code Playgroud)

当比较两个字符串与运营商<true如果第一个操作数将词法第二前进行排序.得到这个结果,因为在词法顺序中,以"1"开头的字符串将在以"9"开头的字符串之前排序,而不管其长度如何.

试试这个:

if (a-b < 0) ...
Run Code Online (Sandbox Code Playgroud)

该术语a-b强制javascript处理数值计算.字符串将转换为数字.

  • _"它不是jQuery-Bug而是Javascript-Bug"_ - 它也不是JavaScript错误,正确的JavaScript行为恰好混淆了新手...... (3认同)

cor*_*ori 5

你的代码很可能比较字符串而不是数字.

这样尝试使用数字功能: Number(countcom) < Number(watchaget).

  • 我会避免养成使用`parseInt'将字符串转换为数字的习惯,因为并非所有数字都是整数.更通用的方法是使用一元加运算符,如`+ countcom <+ watchaget`,或`Number(countcom)<`Number(watchaget)`. (3认同)