【问题标题】:JavaScript If / else statement not return false statementJavaScript if/else 语句不返回 false 语句
【发布时间】:2017-01-22 13:36:34
【问题描述】:

函数返回 true,但是 if / else 语句正在记录 false 结果。知道我哪里出错了吗?

function loginDetails(arrayCheck, value) {
	for(i = 0; i < arrayCheck.length; i++){
  	if(arrayCheck[i] === value){
  		return true;
    }
  }
  return false;
  }

	var username = [1,2,3,4,5,6,7,8,9,10];
  
  document.write('Login Details: ', loginDetails(username, 9), '</p>');
 
  if(loginDetails === true) {
  document.write('Redirect ....Welcome !!</p>'); 
  
  } else {
  document.write('There seems to be an error please try again !!');
  }
  

【问题讨论】:

  • loginDetails 是一个函数。它永远不会等于true
  • 您可能想要做的是将函数loginDetails 的返回值保存到变量中,然后在条件中进行比较。
  • if(loginDetails(username, 9) === true){...}

标签: javascript arrays function if-statement


【解决方案1】:

loginDetails 是一个函数。然后您测试它是否为布尔值true。有趣的是,它永远不会!

我想你确实想运行这个函数。您需要缓存结果以免运行两次:

function loginDetails(arrayCheck, value) {
	for(i = 0; i < arrayCheck.length; i++){
  	    if(arrayCheck[i] === value){
  		    return true;
        }
    }
    return false;
}

var username = [1,2,3,4,5,6,7,8,9,10];

var loggedIn = loginDetails(username, 9);
  
document.write('Login Details: ', loggedIn, '</p>');
 
if(loggedIn === true) {
    document.write('Redirect ....Welcome !!</p>'); 
} else {
    document.write('There seems to be an error please try again !!');
}
  

【讨论】:

  • 非常感谢您指出这一点,非常感谢……非常感谢 JS 的新手。
  • @Evans 如果您正在从使用 document.write 的资源中学习,请使用不同的东西。 document.write 在现代 Javascript 中几乎没有用处;这是 90 年代的遗物!
  • 感谢您的提示,我的 JavaScript 之旅已经两周了,任何建议或提示将不胜感激。
【解决方案2】:

if(loginDetails === true) 是什么意思?这不会将任何参数传递给 loginDetails 函数。
而是尝试if(loginDetails(username, 9) === true)。希望这可行。
否则将loginDetails(username, 9) 存储在变量中并检查该变量是否为true

【讨论】:

    【解决方案3】:

    loginDetails 是一个函数,我想你想检查它的结果是否等于 true。

    function loginDetails(arrayCheck, value) {
    	for(i = 0; i < arrayCheck.length; i++){
      	if(arrayCheck[i] === value){
      		return true;
        }
      }
      return false;
      }
    
    	var username = [1,2,3,4,5,6,7,8,9,10];
    
        var loginDetailsResult = loginDetails(username, 9);
      
      document.write('Login Details: ',loginDetailsResult, '</p>');
     
      if(loginDetailsResult === true) {
      document.write('Redirect ....Welcome !!</p>'); 
      
      } else {
      document.write('There seems to be an error please try again !!');
      }

    【讨论】:

      【解决方案4】:

      您正在检查函数的 reference 是否等于 true,这将始终评估为 false。函数和布尔值是不同的类型,因此比较严格相等将始终返回 false。我已经更正了代码,以便调用函数,并比较函数的结果,而不是对函数的引用。

      function loginDetails(arrayCheck, value) {
      	for(i = 0; i < arrayCheck.length; i++){
        	if(arrayCheck[i] === value){
        		return true;
          }
        }
        return false;
        }
      
      	var username = [1,2,3,4,5,6,7,8,9,10];
        
        document.write('Login Details: ', loginDetails(username, 9), '</p>');
       
        if(loginDetails(username, 9) === true) {
        document.write('Redirect ....Welcome !!</p>'); 
        
        } else {
        document.write('There seems to be an error please try again !!');
        }
        

      【讨论】: