如果条件块阻止了一条消息,但仍然在else块中设置了一个变量

时间:2012-12-14 18:12:34

标签: javascript jquery

所以我有这个javascript函数,reOrderJSON,它命令一个数组,如果参数order等于“反向”,它会在排序后立即反转数组。

我还有一个绑定到关联链接的click事件的函数。

function reOrderJSON(subj,att,order,limit){

    subj.sort(function (a, b,order) {


        a = a[att],
        b = b[att];

        return a.localeCompare(b);


    });

    if(order === "reverse"){
        subj.reverse();
        console.log("Reverse passed a parameter to reOrderJSON")
    }



    layoutDate(subj,limit)
    return depos = subj;
}

function clickReorder(e){
        var orderingLink = e.target;
        var reverseOrder = "";

        var order = $(orderingLink).attr('data-order');
        if(order === "desc" || order === "undefined"){
            $(orderingLink).attr('data-order','asc');
            console.log("Order detected as "+order)
            reverseOrder = false;

        }else{
            $(orderingLink).attr('data-order','desc');
            console.log("Order detected as "+order)

            reverseOrder = "reverse";
        }

        var limit = $('.entries-per-page').val();

        reOrderJSON(e.data.orderedObject,$(e.target).data('assoc'),reverseOrder,limit);

        $('.result th').css('background','transparent');
        $(orderingLink).closest('th').css({'background':'pink'});


        return false;
}

$('.result').on("click", "th a", { orderedObject: depos }, clickReorder);

链接在开头看起来像这样:

<th><a href="#" data-assoc="county">County</a></th>

正如您所知,我正在记录一些调试文本以告知正在发生的事情。我第一次点击链接时,总是在日志中返回这两行: Order detected as undefined Reverse passed a parameter to reOrderJSON

我不明白这是怎么回事,order第一次不应该作为"reverse"传递。我在这里缺少什么?

depos是一个数组对象,如果这有任何区别的话。

1 个答案:

答案 0 :(得分:3)

您的比较

order === "undefined"

目前正在检查字符串“undefined”,但您实际上想要检查变量中的未定义值。

你真的想要:

order == undefined   // no quotes -- it's not a string

或者,甚至更好:

typeof order == "undefined"

因为undefined可以在非严格模式下覆盖。