卡住了:JavaScript比较错误

3
我正在为JavaScript编写一个绘图/图形库,遇到了似乎是一个很大的问题。
我有4个数字输入来定义图表将显示的最小和最大值,就像在TI-84图形计算器上一样:XMinXMaxYMinYMax
<div id="window">
    <input type="number" class="bound" id="minX" value="" />
    <input type="number" class="bound" id="maxX" value="" />
    <br />
    <input type="number" class="bound" id="minY" value="" />
    <input type="number" class="bound" id="maxY" value="" />
</div>

然后我有一段代码,它会获取这些值并在它们被修改时将它们放入函数Plot.setBounds(xMin, xMax, yMin, yMax)中:
var plot1 = new Plot();
$('#window .bound').change(function() {
    var minX = $('#window #minX').val(),
        maxX = $('#window #maxX').val(),
        minY = $('#window #minY').val(),
        maxY = $('#window #maxY').val();
    console.log('modified to:', minX, maxX, minY, maxY);
    plot1.setBounds(minX, maxX, minY, maxY);
    plot1.draw();
});

最后,对于Plot.setBounds(xMin, xMax, yMin, yMax)函数,我有以下内容:
Plot.prototype.setBounds = function (xMin, xMax, yMin, yMax) {
    if ((xMin < xMax) && (yMin < yMax)) {
        this.bounds = [[xMin, xMax], [yMin, yMax]];
    } else {
        console.error('Plot.setBounds(xMin, xMax, yMin, yMax) requires maximum values that are greater than the minimum values!');
        console.log('received:', xMin, xMax, yMin, yMax);
    }
    return this;
};

然而,当xMin >= 2且xMax >= 10时,问题就出现了,因为由于某种原因比较返回false,控制台会抛出错误。您可以检查错误之前和之后给出的数字(已修改为“修改后”和“接收到的”),它们将具有相同的值。
另一个奇怪的事实是,当手动在控制台中计算相同的数字时,比较返回true。这使我相信它与调用函数有关。
还有值得注意的是,问题只发生在xMin >= 2且xMax >= 10时。
您可以在此处测试预览:http://dl.dropbox.com/u/962292/web/plot.js/static.html 如果您能找到解决我的情况的解决方案,我将非常感激。
2个回答

6

如果您有字符串并需要数字:

var minX = +$('#minX').val(),
    maxX = +$('#maxX').val(),
    minY = +$('#minY').val(),
    maxY = +$('#maxY').val();

+是将字符串转换成数字的简单快捷方式。而在#window内唯一的IDs是不相关的。

例如,"9" > "19"; // true


在我使用 JavaScript 的所有时间里,为什么我不知道那个?如果你可以在字符串前面加上加号,为什么人们要使用 parseInt 呢? - mowwwalker
@Walkerneo,如果你想要一个整数,你需要使用parseInt或者使用按位或运算符加零,"34.34" | 0; // 34 - Joe
我注意到这可能会返回一个字符串,但从console.log()给出的值显示不是这样。无论如何,我尝试了使用+号和parseFloat()两种方法,但似乎都不起作用。不过我喜欢你的想法 :D - mdcio
没事了,现在好像可以工作了。我一定是在编辑旧版本的代码,但是查看的是新版本的。我真傻 =P - mdcio

0

另一种获取数字的方法是使用parseInt()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接