【问题标题】:Stumped: Javascript Comparison Error难倒:Javascript比较错误
【发布时间】:2011-10-04 02:44:11
【问题描述】:

我正在为 Javascript 编写一个绘图/图形库,但遇到了一个似乎很严重的问题。

我有 4 个数字输入用于定义图形将显示的最小值和最大值,就像在 TI-84 图形计算器上一样:XMin、XMax、YMin, YMax.

<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

如果您能为我的情况找到解决方案,我将不胜感激。

【问题讨论】:

    标签: javascript graph comparison plot


    【解决方案1】:

    你有字符串,需要数字:

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

    + 是一个简单快速的数字转换。并且 ID 对 #window 是唯一的,这无关紧要。

    例如,"9" &gt; "19"; // true

    【讨论】:

    • 在我使用 javascript 的所有时间中,我为什么不知道呢?如果你可以在字符串前面加一个加号,为什么人们还要使用 parseInt?
    • @Walkerneo,如果你想使用 Integer,你需要 parseInt 或使用按位或零,"34.34" | 0; // 34。
    • 我注意到这可能会返回一个字符串,但console.log() 给出的值显示不同。无论如何,我尝试使用+ 标志和使用parseFloat(),但似乎都不起作用。不过我喜欢你的想法:D
    • 没关系,它现在似乎可以工作了。我一定是在编辑旧版本的代码,但查看的是新版本。傻我=P
    【解决方案2】:

    另一种获取号码的方法是使用parseInt()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      相关资源
      最近更新 更多