如果JavaScript上的/ Else语句不起作用

时间:2015-11-09 22:54:41

标签: javascript

我一直试图让这个问题起作用。如果我删除这里的else语句,它可以正常工作:

function isRank (string){
    string = string.toLowerCase();
  var valid = ['two','three','four','five', 'six', 'seven', 'eight',
  'nine','ten', 'jack', 'queen', 'king', 'ace'];
  //var checkIt = string.toLowerCase();
  
  for (var i = 0; i < valid.length; i++) {
    
    if (string === valid[i])
      return true;
    } 
}

console.log(isRank('SIX'));

但如果我添加else语句,就像这里只返回false ....什么给出?

jsBin

4 个答案:

答案 0 :(得分:2)

如果我遵循相当明显的逻辑:

function isRank(string) {
  string = string.toLowerCase();
  var valid = ['two', 'three', 'four', 'five', 'six', 'seven', 'eight',
  'nine', 'ten', 'jack', 'queen', 'king', 'ace'];
  //var checkIt = string.toLowerCase();

  for (var i = 0; i < valid.length; i++) {
    if (string === valid[i])
      return true;
  }
  return false;
}

如果没有合适,则返回false,也就是说,在检查完所有内容之后,这意味着在循环之后。

答案 1 :(得分:1)

您需要在for循环后返回false:

function isRank (string){
  string = string.toLowerCase();
  var valid = ['two','three','four','five', 'six', 'seven', 'eight',
  'nine','ten', 'jack', 'queen', 'king', 'ace'];
  //var checkIt = string.toLowerCase();
  for (var i = 0; i < valid.length; i++) {
    if (string === valid[i]) return true;
  }
  return false;
}
console.log(isRank('SIX'));

只是为了好玩,简化版本:

function isRank(string) {
  string = string.toLowerCase();
  var valid = ['two', 'three', 'four', 'five', 'six', 'seven', 'eight',
  'nine', 'ten', 'jack', 'queen', 'king', 'ace'];
  return !!~valid.indexOf(string);
}

答案 2 :(得分:1)

添加else语句时不断变为错误的原因是因为当您返回时退出该函数。你只能回来一次。因此,当for循环运行时,它会检查第一个值

if ('SIX' === 'two') {
  return true;
}
else {
  return false;
}

所以这里停止检查,因为你已经返回false。修复此问题的方法是检查是否存在匹配以及是否返回true。如果没有让循环继续。当循环完成运行时,你应该返回false,因为没有匹配:

function isRank (string) {
  string = string.toLowerCase();
  var valid = ['two','three','four','five', 'six', 'seven', 'eight', 'nine','ten', 'jack', 'queen', 'king', 'ace'];
  for (var i = 0; i < valid.length; i++) {
    if (string === valid[i]) {
      return true;
    }
  }
 return false;
}
console.log(isRank('SIX'));

答案 3 :(得分:0)

你的代码没有“其他”,但我会采取有根据的猜测,你写了这个:

if (string === valid[i])
  return true;
else
  return false;

或类似。

问题是return立即停止了所有事情。因此,除非比赛是第一项,否则无论如何都会得到“假”。相反,你应该在循环之后立即return false; (在它之外!),这松散地转换为“如果我们在没有return true;的情况下做到这一点,那么{{1} }”。