JavaScript If语句未按预期执行,联系人查询总返回无对应联系人
freeCodeCamp 联系人查询功能If语句执行异常原因分析
你的错误实现存在3个核心问题:
- 循环提前意外终止
你把name !== contacts[i]["firstName"]的判断放在了循环体内部,只要第一次循环(对应数组第一个联系人Akira)时姓名不匹配,就会直接触发return "No such contact",直接退出整个函数,根本不会继续遍历数组后面的其他联系人。哪怕你要查询的Harry是数组第二个元素,也会在第一轮对比失败后直接返回无匹配联系人,这也是所有测试都直接返回「No such contact」的核心原因。 - 逻辑分支优先级错误
你把姓名匹配失败的判断放在了属性检查的前面,就算碰巧匹配到了对应姓名的联系人,如果该联系人没有传入的prop属性,你的前两个分支(匹配姓名且有属性、姓名不匹配)都不会触发,最后一个分支的判断本身也存在错误,无法返回正确的「No such property」结果。 - 属性存在性判断写法完全错误
你写的else if (prop !== contacts[i]["prop"])存在两个问题:- 你要判断的是对象是否存在prop对应的属性,而不是判断变量prop的值和对象的
prop属性的值是否相等,判断属性存在性应该用hasOwnProperty方法 contacts[i]["prop"]是固定取对象中键为"prop"的值,根本不会读取你传入的prop变量,要读取变量对应的键应该写为contacts[i][prop]
- 你要判断的是对象是否存在prop对应的属性,而不是判断变量prop的值和对象的
正确实现的逻辑合理性:
正确写法的逻辑是分层的:
- 先遍历所有联系人,只有匹配到姓名相同的联系人才进入内层判断
- 匹配到姓名后直接判断属性是否存在,存在就返回属性值,不存在就返回「No such property」,执行到return后直接退出函数,不会继续遍历
- 只有整个循环遍历完所有联系人都没有找到姓名匹配的,才会执行循环外的
return "No such contact",完全符合需求逻辑。
内容的提问来源于stack exchange,提问作者DCoderT
相关产品推荐
相关产品推荐

