You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"])存在两个问题:
    1. 你要判断的是对象是否存在prop对应的属性,而不是判断变量prop的值和对象的prop属性的值是否相等,判断属性存在性应该用hasOwnProperty方法
    2. contacts[i]["prop"]是固定取对象中键为"prop"的值,根本不会读取你传入的prop变量,要读取变量对应的键应该写为contacts[i][prop]

正确实现的逻辑合理性:

正确写法的逻辑是分层的:

  1. 先遍历所有联系人,只有匹配到姓名相同的联系人才进入内层判断
  2. 匹配到姓名后直接判断属性是否存在,存在就返回属性值,不存在就返回「No such property」,执行到return后直接退出函数,不会继续遍历
  3. 只有整个循环遍历完所有联系人都没有找到姓名匹配的,才会执行循环外的return "No such contact",完全符合需求逻辑。

内容的提问来源于stack exchange,提问作者DCoderT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:09