Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript函数中返回布尔值_Javascript - Fatal编程技术网

在JavaScript函数中返回布尔值

在JavaScript函数中返回布尔值,javascript,Javascript,我正在进行客户端表单验证,以检查密码是否匹配。但是验证函数总是返回未定义的 function validatePassword(errorMessage) { var password = document.getElementById("password"); var confirm_password = document.getElementById("password_confirm"); if(password.value) { // Check i

我正在进行客户端表单验证,以检查密码是否匹配。但是验证函数总是返回
未定义的

function validatePassword(errorMessage)
{
   var password = document.getElementById("password");
   var confirm_password = document.getElementById("password_confirm");

   if(password.value)
   {
      // Check if confirm_password matches
      if(password.value != confirm_password.value)
      {
         return false;
      }
   }
   else
   {
      // If password is empty but confirm password is not
      if(confirm_password.value)
      {
         return false;
      }
   }
   return true;
}
请注意,
validatePassword
是从表单对象的成员函数调用的

function Form(validation_fn)
{
   // Do other stuff
   this.submit_btn = document.getElementById("submit");
   this.validation_fn = validation_fn;
}

Form.prototype.submit = funciton()
{
   var result;
   if(this.validation_fn)
   {
      result = this.validation_fn();
   }

   //result is always undefined
   if(result)
   {
       //do other stuff
   }
}

您可以将其简化很多:

  • 检查一个是否为空
  • 检查它们是否相等
这将导致这样的结果,它将始终返回布尔值。您的函数也应该始终返回布尔值,但如果简化代码,您可以看到它的性能会更好一些:

function validatePassword()
{
   var password = document.getElementById("password");
   var confirm_password = document.getElementById("password_confirm");

   return password.value !== "" && password.value === confirm_password.value;
       //       not empty       and              equal
}

您可以将返回值包装在布尔函数中

Boolean([return value])

这将确保所有falsey值都是false,truthy语句都是true。

在声明任何变量时不要忘记使用var/let。有关JS编译器行为的示例,请参见下面的示例

function  func(){
return true;
}

isBool = func();
console.log(typeof (isBool));   // output - string


let isBool = func();
console.log(typeof (isBool));   // output - boolean

当然是一条旧线,但显然是一条流行线。现在是2020年,这些答案都没有解决不可读代码的问题@pimvdb的答案占用的行数较少,但理解起来也相当复杂。为了更容易调试和更好的可读性,我应该建议将OP的代码重构为类似这样的内容,并采用早期返回模式,因为这可能是您不确定代码未定义的主要原因:

function validatePassword() {
   const password = document.getElementById("password");
   const confirm_password = document.getElementById("password_confirm");

   if (password.value.length === 0) {
      return false;
   }

   if (password.value !== confirm_password.value) {
      return false;
   }
  
   return true;
}

此函数永远不会返回未定义的
。请定义“从窗体对象的成员函数调用”。只需按CTRL+SHIFT+J键——检查是否有错误,如果是,请在此处发布,如果不是,请打开调试器并运行它。@AnilShanbhag不会返回任何错误。我确实打开了调试器,当我逐步浏览代码时,我意识到结果被设置为
undefined
,您从问题中排除了一些相关信息。我猜您可能是在那里的某个地方发出服务器请求(或执行其他异步操作),或者创建
newform()
对象时,您不是没有传递函数,就是试图传递一个尚不存在的函数。您是否已验证是否调用了
validatePassword
?请提供所有相关代码。这里没有任何证据表明存在问题。好的,我找到了。。当我创建一个新表单对象时,它应该是新表单(function(){return eval(objs.validator);}),而不是新表单(function(){eval(objs.validator);}),缺少其中的返回语句。。谢谢你们helping@primvdb它仍然返回未确定的
。。我在做点什么bizzare@tryurbest:你可能有什么错误吗?这个函数总是返回,它返回的是一个布尔值。。。在您的代码中,然后
这个。验证\u fn
应该为false。此验证的值是多少?@pimvdb。。如您所见,我正在将
this.validation\u fn
的值分配给
结果
右侧。。当我通过调试器单步执行时,结果是未定义的。@tryurbest:只有在(this.validation\u fn)
的情况下才执行此操作。所以这个变量可能是未定义的。只需检查以确保。@primvdb这只是检查表单对象中是否存在验证。。如果有,调用result=this.validation()的函数。顺便说一句,你也可以尝试
return!!somevalue