javascript - 为什么这个 JavaScript 验证会根据条件的顺序工作?

标签 javascript validation conditional-statements

我正在编写一个验证一段文本的小函数,我对验证感到非常沮丧。

问题是:当我尝试将字符串与 null 进行比较(以检查取消按钮)时,它的工作取决于我放置条件的位置!它似乎只有在我开始验证时才有效。我也针对每种情况用括号对其进行了测试,但我得到了相同的结果。

这里发生了什么?

我在 Stack Overflow 上找到了这个答案,但它是针对 Python 的,我不太理解它:

Does the Order of Conditions affect Performance?

代码

function validate()
{
    var isValid = false;

    var text;

    while (isValid == false)
    {
        text = prompt("Enter one text between 1 and 10 characters, no empty, blank spaces, only numbers");

        /*
          WITH NULL (CANCEL BUTTON) VALIDATION AT THE BEGINNING,
          IT WORKS:
        */

        if (text != null &&
            (text.length >= 1 && text.length <= 10) &&
            text != "" &&
            isNaN(text) == false)
        {
            isValid=true;
        }

        /*
          WITH NULL (CANCEL BUTTON) VALIDATION AT ANOTHER POSITION, IT DOESN´T WORK:

          It generates "TypeError:Text is null"
        */

        if ( (text.length >= 1 && text.length < 10)  &&
             isNaN(text) == false && text != "" && text !=null)
        {
              isValid = true;
        }
    }

    if (isValid == true)
    {
        // Some code when validation is OK
    }
}

最佳答案

您要先检查文本是否不为空,因为如果该条件失败,则不会评估其余条件,因为 && 不变量已被违反。如果文本为空,并且空检查发生在其他检查之后,您将收到错误。

关于javascript - 为什么这个 JavaScript 验证会根据条件的顺序工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620536/

相关文章:

javascript - 无法从输入类型数值中删除逗号

javascript - 检查是否有任何数字单独重复超过 N 次

c++ - sizeof(...) = 0 或 C++ 模板中的条件变量声明

javascript - 列出/输出来自单个输入的逗号分隔值

jquery - 使用 JQUERY 在文本框中仅允许字母数字

javascript - 使用 gzip 压缩 JavaScript

python - 从Python中的字符串获取if子句

foreach - 如何仅在匹配另一个变量时调用映射元素中的值

javascript - 在 Chrome 中重新显示 html 输入范围拇指

javascript - 如何仅计算每个选中的复选框