为什么以下javascript函数总是返回true?

时间:2012-01-09 15:11:54

标签: javascript if-statement return

我有以下功能,它将始终返回True。任何想法为什么以及如何避免它?谢谢大家。

function validateStatuses(xyx){
var umm = ugh[xyx];
var selects = $('#cont_'+ugh.xyz+' .status_select');
var codes = $('#cont_'+ugh.xyz+' .status_code');
for (var i = 0; i < selects.length; i++) {
    var value = selects[i].options[selects[i].selectedIndex].value;
    if (value == 'new'){
        for (var j = 0; j < codes.length; j++) {
            var blagh = codes[j].options[codes[j].selectedIndex].value;
            if(blagh == 13){
                $('#info_dialog').html('');
                $('#info_dialog').append("<p>You are trying to process a bill ("+bill.name+") with a STATUS of NEW and a STATUS CODE of NONE. Please correct this issue before you proceed!</p><hr />");
                $('#info_dialog').dialog({
                    buttons:{
                        Cancel: function(){
                            $(this).dialog('close');
                        }
                    }
                    });
                billCounterAdd();
                return false;
            }//end if           
        }//end for
    }else{
        return true;  //this is the problem;
    }//end if
}//end for
}//end Function

1 个答案:

答案 0 :(得分:3)

我敢说你至少有一个选择,其值不是'new'。因为您在return true;子句中完成了else,所以第一个选择值不是'new'将导致函数返回true。

它看起来确实有一个错误的返回路径(如果在开头有一个'new'选择并且有一个代码选择值为13),但也许那个测试用例没有来在你的测试中。

在弄清楚这样的事情有什么问题方面,没有什么比通过代码并观察它在一个像样的调试器中逐行运行的方式。所有主流浏览器现在都已内置(最终),因此您可以准确地查看正在发生的事情并检查变量等。