当布尔函数返回false时,&&运算符和执行

Alb*_*réo 4 javascript operators

我不明白javascript的行为.

我正在对jquery ui对话框进行表单验证.这似乎是一个javascript问题,而不是jquery问题.

对于验证,我为每个返回true或false的字段执行一个函数,一个布尔变量接收连续的&&运算符的结果.像这样 :

bValid = checkRegexp(validite, /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/, "Entrez la date de validit\350 sous la forme JJ/MM/AAAA." );
bValid = bValid && checkLength(libelle, "Libell\351", 1, 100 );
bvalid = bValid && checkLength(description, "Description", 1, 250);
Run Code Online (Sandbox Code Playgroud)

以下是验证功能:

function checkLength( o, n, min, max ) {
    if ( o.val().length > max || o.val().length < min ) {
        o.addClass( "ui-state-error" );
        if(o.val().length == 0) { textError = textError + "le champ " + n + " est requis !\n"; }
        else { textError = textError + "Taille de " + n + " entre " + min + " et " + max + "caract\350res.\n"; }
        return false;
    } else {
        return true;
    }
}

function checkRegexp( o, regexp, n ) {
     if (!(regexp.test(o.val()))) {
         o.addClass( "ui-state-error" );
         textError = textError + n + "\n";
         return false;
     } else {
         return true;
     }
}
Run Code Online (Sandbox Code Playgroud)

预期的行为是所有函数都被执行,并且所有错误的字段都标记为错误,并且错误消息的串联.有关信息,bValid变量包含连续的&&运算符的布尔结果.最后一点有效; 没问题.

真正的行为是,当函数返回时false,似乎没有执行以下函数.结果是只有遇到的第一个错误字段被标记为错误.

为什么?

Hun*_*len 7

因为&&运营商是"短路的".这意味着,由于编译器/解释器/任何知道操作&&符的双方操作数必须为真,如果第一个操作数为假,则第二个操作符不会被执行.

如果您希望您的函数执行肯定,只需交换操作数的顺序&&:

bValid = checkRegexp(validite, /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/, "Entrez la date de validit\350 sous la forme JJ/MM/AAAA." );
bValid = checkLength(libelle, "Libell\351", 1, 100 )     && bValid;
bvalid = checkLength(description, "Description", 1, 250) && bValid
Run Code Online (Sandbox Code Playgroud)