我之前从未遇到过这个错误,每当我的jquery脚本比较数字9和10或99和100或999和1000与9 <10或99 <100或999 <1000时我得到错误的结果,I得到假而不是真。 我该如何解决这个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);
当countcom = 9且watchaget = 10时,它应输入if if,但我认为它们相同并且不会进入它。
答案 0 :(得分:12)
jQuery是Javascript。如果它是一个bug,它不是jQuery-Bug而是Javascript-Bug。 (编辑:有关于这句话的讨论。阅读评论)
试试这个解决方案:
变量定义为字符串:
var a = "9";
var b = "10";
此比较将重现您的结果:
if (a < b) ...
当您将两个字符串与运算符<
进行比较时,如果第一个操作数将在第二个操作数之前进行词法排序,则会得到true
。你得到这个结果,因为在词汇顺序中,一个字符串以&#34; 1&#34;开头。将以&#34; 9&#34;开头的字符串排序,无论其长度如何。
请改为尝试:
if (a-b < 0) ...
术语a-b
强制javascript处理数值计算。字符串将转换为数字。
答案 1 :(得分:5)
您的代码很可能是比较字符串而不是数字。
尝试使用Number功能:Number(countcom) < Number(watchaget)
。
答案 2 :(得分:1)
另外值得注意的是:
[7,8,9,10].sort() // => [10, 7, 8, 9]
sort函数默认将元素转换为字符串。为了避免这种情况:
[7,8,9,10].sort(function(a, b) { return a - b; }) // => [7, 8, 9, 10]
答案 3 :(得分:1)
您正在比较两个字符串值。尝试使用parseInt(value, 10)
在你的情况下,
if (parseInt(countcom,10) < parseInt(watchaget,10))
{
....
}
希望它有所帮助。