带大括号的 If / Else 语句
If / Else statement with curly braces
我正在尝试创建一个具有两个参数的函数,一个用于数组 (ary),第二个用于将在数组内搜索的名称。
但是,我不明白为什么第一个代码不起作用而第二个代码起作用。
有人能解释一下吗?
// wrong code
var fruit = ['banana', 'apple', 'cherry', 'watermelon'];
var food = ['pizza', 'rice', 'cheese', 'potato'];
var search = function(ary, name) {
for (var i = 0; i < ary.length; i++) {
if (name == ary[i]) {
return name + " was found!";
} else {
return name + " was not found";
}
}
};
search(food, 'potato');
//"potato was not found"
// right code
var fruit = ['banana', 'apple', 'cherry', 'watermelon'];
var food = ['pizza', 'rice', 'cheese', 'potato'];
var search = function(ary, name) {
for (var i = 0; i < ary.length; i++)
if (name == ary[i])
return name + " was found!";
return name + " was not found";
};
search(food, 'potato');
//"potato was found!"
谢谢!
在第一个示例中,您将在第一次匹配失败时 return,因此在匹配数组的第一项失败后,它将从函数中 return。
所以 else 块中的部分应该移到循环之外。
因为在第一个函数中,uou 在一次迭代后立即 return;您不必等待整个数组遍历;我敢打赌数组的第一个元素是 'found'.
因此,对于您的第一个函数,将找到这些:
search(fruit, 'banana');
search(food, 'pizza');
但没有其他人。
在第二个中,returning 'not found' 仅在整个数组已循环遍历但未找到匹配项时才会发生,即当它退出 for 循环时。
我明白了。
在第一个代码段中,您在 else 语句中 returning 为 false。这意味着第一次通过循环时,您将 return 为真或为假。它只检查第一项。
在您的第一个版本中,else
在 for
循环中,因此该函数将始终 return "was found" 或 "was not found"第一次迭代。循环永远不会到达它的第二次迭代。
在你的第二个版本中,else
不是 for
循环体的一部分,所以它只在循环完成后运行(运行 它的所有迭代)而没有找到匹配。
for (var i = 0; i < ary.length; i++)
if (name == ary[i])
return name + " was found!";
return name + " was not found";
等同于:
for (var i = 0; i < ary.length; i++) {
if (name == ary[i]) {
return name + " was found!";
}
}
return name + " was not found";
它 return false
在遍历数组中的所有项目之后。在您提供的错误代码中,它只检查第一项是否等于 name
因为在循环中您 return 无论是否找到它(因此如果第一项等于 name
它将 return true
,否则它将 return false
) 所以来自索引 1
的项目将不会被检查,因为函数已经 returned.
注意: 你可以使用 JS 中的默认搜索功能:indexOf
像这样:
var search = function(ary, name) {
if(ary.indexOf(name) != -1) // index is -1 (not valid) then it's not found
return name + " was found";
else
return name + " was not found";
}
我正在尝试创建一个具有两个参数的函数,一个用于数组 (ary),第二个用于将在数组内搜索的名称。
但是,我不明白为什么第一个代码不起作用而第二个代码起作用。
有人能解释一下吗?
// wrong code
var fruit = ['banana', 'apple', 'cherry', 'watermelon'];
var food = ['pizza', 'rice', 'cheese', 'potato'];
var search = function(ary, name) {
for (var i = 0; i < ary.length; i++) {
if (name == ary[i]) {
return name + " was found!";
} else {
return name + " was not found";
}
}
};
search(food, 'potato');
//"potato was not found"
// right code
var fruit = ['banana', 'apple', 'cherry', 'watermelon'];
var food = ['pizza', 'rice', 'cheese', 'potato'];
var search = function(ary, name) {
for (var i = 0; i < ary.length; i++)
if (name == ary[i])
return name + " was found!";
return name + " was not found";
};
search(food, 'potato');
//"potato was found!"
谢谢!
在第一个示例中,您将在第一次匹配失败时 return,因此在匹配数组的第一项失败后,它将从函数中 return。
所以 else 块中的部分应该移到循环之外。
因为在第一个函数中,uou 在一次迭代后立即 return;您不必等待整个数组遍历;我敢打赌数组的第一个元素是 'found'.
因此,对于您的第一个函数,将找到这些:
search(fruit, 'banana');
search(food, 'pizza');
但没有其他人。
在第二个中,returning 'not found' 仅在整个数组已循环遍历但未找到匹配项时才会发生,即当它退出 for 循环时。
我明白了。
在第一个代码段中,您在 else 语句中 returning 为 false。这意味着第一次通过循环时,您将 return 为真或为假。它只检查第一项。
在您的第一个版本中,else
在 for
循环中,因此该函数将始终 return "was found" 或 "was not found"第一次迭代。循环永远不会到达它的第二次迭代。
在你的第二个版本中,else
不是 for
循环体的一部分,所以它只在循环完成后运行(运行 它的所有迭代)而没有找到匹配。
for (var i = 0; i < ary.length; i++)
if (name == ary[i])
return name + " was found!";
return name + " was not found";
等同于:
for (var i = 0; i < ary.length; i++) {
if (name == ary[i]) {
return name + " was found!";
}
}
return name + " was not found";
它 return false
在遍历数组中的所有项目之后。在您提供的错误代码中,它只检查第一项是否等于 name
因为在循环中您 return 无论是否找到它(因此如果第一项等于 name
它将 return true
,否则它将 return false
) 所以来自索引 1
的项目将不会被检查,因为函数已经 returned.
注意: 你可以使用 JS 中的默认搜索功能:indexOf
像这样:
var search = function(ary, name) {
if(ary.indexOf(name) != -1) // index is -1 (not valid) then it's not found
return name + " was found";
else
return name + " was not found";
}