嵌套的 if 语句和 && (and) 运算符在这个 for 循环中有何不同?
how do nested if statements and the && (and) operator differ inside this for loop?
这里有类似的问题,但我找不到与此相关的问题。这是我的问题:
这两个函数输出不同的结果。我的印象是 && 运算符基本上与嵌套的 if 语句一样工作。关于 && 运算符的工作原理,我这边显然存在 misunderstanding/logic 错误。我相信这与处于循环中并尝试同时读取条件或类似的东西有关,但如果有人能详细说明正在发生的事情,我们将不胜感激。第二个函数中的 && 运算符是怎么回事,为什么输出 属性 未找到?
var contacts = [
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
},
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
}
];
function lookUp(arr, firstName, prop){
for (var x = 0; x < contacts.length; x++){
if (arr[x].firstName === firstName)
if (arr[x].hasOwnProperty(prop))
return arr[x][prop];
else
return "No such property";
}
}
lookUp(contacts, "Kristian", "likes")
// ["Javascript", "Gaming", "Foxes"]
function lookUp(arr, firstName, prop){
for (var x = 0; x < contacts.length; x++){
if (arr[x].firstName === firstName && arr[x].hasOwnProperty(prop))
return arr[x][prop];
else
return "No such property";
}
}
lookUp(contacts, "Kristian", "likes")
// "No such property"
正确的函数如下所示:
function lookUp(arr, firstName, prop) {
for (var x = 0; x < contacts.length; x++) {
if (arr[x].firstName === firstName && arr[x].hasOwnProperty(prop))
return arr[x][prop];
}
return "No such property";
}
说明
你的循环将只有一次迭代,因为当第一个 if
为真时它将 return arr[x][prop]
或者如果它为假它将 return "No such property"
A return
跳出函数 allways,这就是循环停止的原因
而不是 "correct" 解决方案将遍历所有数组元素,如果没有提供的名称,它将 return 与 "No such property"
第二个函数不等同于第一个函数,因为内部 if 有 else 条件。
AND
运算符仅在条件为真时才执行后续条件。
例如:
如果条件是 X == Y && Y == Z 则 Y == Z 将仅在 X == Y
时执行
在第一种情况下,为条件 1 添加其他条件,它看起来像:
if Condition1 {
if condition2
console.log("1");
else
console.log("2");
}
else
console.log("3");
Second Case
If Condition1 && Condition2
console.log("1");
else
console.log("2 and 3"); // all the case of 2 and 3 come here
这是 100% 有效
function lookUp(arr, firstName, prop){
var lock;
for(var i = 0; i < arr.length; i++)
{
if((arr[i].firstName == firstName) && (arr[i].hasOwnProperty(prop)))
{
lock = arr[i][prop];
break;
}else{
lock = "No such property";
}
}
return lock;
}
这里有类似的问题,但我找不到与此相关的问题。这是我的问题:
这两个函数输出不同的结果。我的印象是 && 运算符基本上与嵌套的 if 语句一样工作。关于 && 运算符的工作原理,我这边显然存在 misunderstanding/logic 错误。我相信这与处于循环中并尝试同时读取条件或类似的东西有关,但如果有人能详细说明正在发生的事情,我们将不胜感激。第二个函数中的 && 运算符是怎么回事,为什么输出 属性 未找到?
var contacts = [
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
},
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
}
];
function lookUp(arr, firstName, prop){
for (var x = 0; x < contacts.length; x++){
if (arr[x].firstName === firstName)
if (arr[x].hasOwnProperty(prop))
return arr[x][prop];
else
return "No such property";
}
}
lookUp(contacts, "Kristian", "likes")
// ["Javascript", "Gaming", "Foxes"]
function lookUp(arr, firstName, prop){
for (var x = 0; x < contacts.length; x++){
if (arr[x].firstName === firstName && arr[x].hasOwnProperty(prop))
return arr[x][prop];
else
return "No such property";
}
}
lookUp(contacts, "Kristian", "likes")
// "No such property"
正确的函数如下所示:
function lookUp(arr, firstName, prop) {
for (var x = 0; x < contacts.length; x++) {
if (arr[x].firstName === firstName && arr[x].hasOwnProperty(prop))
return arr[x][prop];
}
return "No such property";
}
说明
你的循环将只有一次迭代,因为当第一个 if
为真时它将 return arr[x][prop]
或者如果它为假它将 return "No such property"
A return
跳出函数 allways,这就是循环停止的原因
而不是 "correct" 解决方案将遍历所有数组元素,如果没有提供的名称,它将 return 与 "No such property"
第二个函数不等同于第一个函数,因为内部 if 有 else 条件。
AND
运算符仅在条件为真时才执行后续条件。
例如: 如果条件是 X == Y && Y == Z 则 Y == Z 将仅在 X == Y
时执行在第一种情况下,为条件 1 添加其他条件,它看起来像:
if Condition1 {
if condition2
console.log("1");
else
console.log("2");
}
else
console.log("3");
Second Case
If Condition1 && Condition2
console.log("1");
else
console.log("2 and 3"); // all the case of 2 and 3 come here
这是 100% 有效
function lookUp(arr, firstName, prop){
var lock;
for(var i = 0; i < arr.length; i++)
{
if((arr[i].firstName == firstName) && (arr[i].hasOwnProperty(prop)))
{
lock = arr[i][prop];
break;
}else{
lock = "No such property";
}
}
return lock;
}