我很尴尬地问这样一个基本问题。但如果这是我的知识中的一个基本或简单的差距,我宁愿得到一个解释,为什么我可以尽早开始养成良好的习惯。
我有一个函数,它接受一个字符串作为参数,并将其与数组值进行比较。
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i++){
if(greetings === hello[i]){
return true;
}else{
return false;
}
}
}
似乎每次我运行for for循环时,它只会检查第一个数组hello[0]
,然后它似乎会中断。我怎么能阻止这种情况发生?我在返回true之后尝试使用continue;
,但这也没有修复它。我觉得我应该知道这一点,但我完全是在脑力训练,无法弄清楚原因。
谢谢!
答案 0 :(得分:7)
由于您的return false
语句,您应将其置于循环之外并删除else
语句:
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i++){
if(greetings === hello[i]){
return true;
}
}
return false;
}
说明:当greetings
参数不等于第一个元素'hello'
时,代码将执行else
语句,该语句返回false
并停止功能执行。
答案 1 :(得分:2)
您的return
语句违反了该功能。如果您删除了return
语句,它会遍历整个数组(虽然看起来您实际上并没有做任何事情,所以我不知道您是怎么做的知道那个)。
如果您只想在数组中greetings
时返回true,那么这就是您正在寻找的内容:
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i++){
if(greetings === hello[i]){
return true;
}
}
return false;
}
请注意,返回false已移至循环外部。这样,只要找到greetings
,它就会返回true,否则它将完成循环,然后返回false。
答案 2 :(得分:0)
我在您的代码中添加了注释并更改了错误的部分。
移除else
块并将return false;
放出for
循环。这将产生一个完整的for
循环。只有if
语句的条件为true
,for
循环才会return
。如果for
循环结束而没有返回,则将执行下面的return false;
语句。
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i++){
if(greetings === hello[i]){
return true;
}
/* if you add a else block here. it means you want your 'else condition' to be checked in every single loop. Since 'if statement has a 'return' and 'else' statement has a 'return'. So if there is a 'else' here, no matter what condition you add , your for loop can only be executed once. */
}
return false; // only the for loop is over and no return. this statement will be executed.
}