我一直试图让这个问题起作用。如果我删除这里的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 ....什么给出?
答案 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} }”。