Javascript<的问题当条件肯定为真时,运算符返回false

时间:2017-02-07 11:57:50

标签: javascript conditional-statements operator-keyword

我遇到了javascript问题,我将其作为搜索结果页面的一部分使用,希望有人可以提供帮助。我有一个功能,检查变量' currentAmount'小于变量' total'。如果currentAmount小于total,则执行某些操作,否则不执行任何操作。

    var currentAmount = document.getElementById('currentAmountHidField').value;
    var total = '@Html.Raw(Json.Encode(Model.ResultCount))';
    var tempScrollTop = $(window).scrollTop();

    function loadMore() {
        alert("current amount" + currentAmount);
        alert("total" + total);
        var listView = $("#propertyList").data("kendoListView");

        if (currentAmount < total) {
            alert("function is being run");
            currentAmount = +currentAmount + 12;
            document.getElementById('currentAmountHidField').value = currentAmount;
            if (currentAmount >= total) {
                $('#loadMoreButton').hide();
            }
        }
        else {
            alert("function is not being run");
        }

        listView.dataSource.pageSize(currentAmount);
        listView.refresh();
        tempScrollTop = $(window).scrollTop();
    }

在上面,currentAmount最初总是为12.在大多数情况下,这完全正常但是对于一个搜索实例,其中total = 108,javascript正在处理函数的else子句。即表示&#34;功能未运行的警报&#34;。我无法弄清楚原因。

请注意,有警报可供测试。它会弹出&#34; currentAmount12&#34;然后&#34;总计108&#34;然后&#34;功能没有运行&#34;。这没有任何意义吗?我甚至尝试立即用2个数字做其他事情(例如从108减去12)只是为了检查那些被处理为数字的数字,它们就是这样。就像我说的那样,这适用于我能够测试的所有其他数字组合。

就像javascript一样,单独一个搜索条件,读取12超过108.有趣的是,当我在loadMore函数的第一行内将值硬化为12时,它将相应地运行但显然那不好。

任何帮助都将非常感谢。为什么javascript认为12大于108?

由于

3 个答案:

答案 0 :(得分:2)

currentAmounttotal都是字符串,因此它们按字典顺序进行比较,而不是数字进行比较。 '12'大于'108'

使用parseInt()将输入值转换为数字,并忽略total周围的引号,这样它就是一个数字。

var currentAmount = parseInt(document.getElementById('currentAmountHidField').value, 10);
var total = @Html.Raw(Json.Encode(Model.ResultCount));

当你写下来时,你显然知道这是一个问题:

currentAmount = +currentAmount + 12;

因为+之前的currentAmount用于将其转换为数字(因此您可以添加而不是连接)。我想你不知道它也会影响比较。

答案 1 :(得分:1)

从表单控件中获取的所有值都是字符串,因此这是currentAmount包含的值。然后突然间它应该是有意义的,例如&#34; 12&#34; &LT; &#34; 5&#34;,因为&#34; 1&#34;不到&#34; 5&#34;。

解决方案:使用parseInt()parseFloat()来获取变量中的实际数字,而不是字符串 - 类似于数字但不是。

答案 2 :(得分:0)

请将您的String变量解析为所需的类型:parseFloat / parseInt

targetPositiveDimensions[currentTarget] = imageTarget.getSize();
temp[0] = targetPositiveDimensions[currentTarget].getData()[0] / 2.0f;
temp[1] = targetPositiveDimensions[currentTarget].getData()[1] / 2.0f;
targetPositiveDimensions[currentTarget].setData(temp);

calcScreenCoordsOf(new float[]{temp[0], temp[1]}, trackableResult.getPose());