Javascript 嵌套if语句与&&;(或)操作员

Javascript 嵌套if语句与&&;(或)操作员,javascript,arrays,object,if-statement,Javascript,Arrays,Object,If Statement,我一直在尝试用以下代码解决这个问题: function lookUpProfile(name, prop){ for (let a = 0; a < contacts.length; a++) { if (contacts[a].firstName == name && contacts[a].hasOwnProperty(prop)) { console.log(contacts[a][prop]); } else if (name != cont

我一直在尝试用以下代码解决这个问题:

function lookUpProfile(name, prop){
for (let a = 0; a < contacts.length; a++) {
  if (contacts[a].firstName == name && contacts[a].hasOwnProperty(prop)) {
    console.log(contacts[a][prop]);
  }
    else if (name != contacts[a].firstName) {
      return "No such contact";
    }
     else {
       return "No such property";
     }
}
函数lookUpProfile(名称、属性){
for(设a=0;a
但是,本页提出了以下建议,并且有效:

for (var x = 0; x < contacts.length; x++){
if (contacts[x].firstName === name) {
    if (contacts[x].hasOwnProperty(prop)) {
        return contacts[x][prop];
    } else {
        return "No such property";
    }
}
}
return "No such contact";
for(变量x=0;x
我还尝试将上述内容修改为:

for (var x = 0; x < contacts.length; x++) {
    if (contacts[x].firstName === name && contacts[x].hasOwnProperty(prop)) {
            return contacts[x][prop];
        } else {
            return "No such property";
        }
    }
}
return "No such contact";
for(变量x=0;x
但是没有用。 所以我的问题是,为什么我的代码不能工作?为什么需要使用嵌套的if语句而不是&&运算符


感谢您的关注。

您发布的每个函数(关于最后两个)都有其独特的行为。不同之处在于,当您有
联系人时,在修改的
函数中,如果使用
if
语句测试的表达式的计算结果为
false
将返回“无此类属性”
,您将只返回
“无此类联系人”
如果没有
联系人,则只有
联系人。

如果函数的输入是“Harry”,恰好位于对象的第二或第三位,则循环将无法到达,因为在第一次迭代时,它将转到“无此类联系人”,并停止运行函数

使用您创建的函数将始终返回:
contacts[x][prop]
“无此类属性”
,且此行
返回“无此类联系人”永远不会执行,为什么?

通过嵌套两个
if
语句,新的
if
语句将返回以下任一语句:
contacts[x][prop]如果验证为
true
如果验证为
false
则“无此类属性”
,因此即使
联系人[x].firstName==name
条件验证为
false
,此行也将不再执行/访问。这就是为什么要使用两个
if
语句:第一个返回
“无此类联系”如果它是
false
(即使没有
else
语句,因为如果它验证为
false
,那么在第一个
if
语句中将不会执行任何操作,因此,函数会跳到该
if
语句之后的下一行,该
语句返回“无此类接触”

简单地说:即使
联系人[x].firstName===name
falsy,您的函数也将返回
“无此类属性”

下面是一个片段来说明:

//一些虚拟值只用于演示!
var触点=[
 {
名字:“ths”,
姓:“萨克”
 },
{
名字:“名字”,
姓氏:“姓氏”
 }
];
/**
*修正函数
**/
var r=(函数测试(名称、属性){
对于(变量x=0;x您应该检查