JS中for循环不遍历对象数组,校验用户名密码始终返回false问题排查
问题原因
核心错误是对象属性名大小写不匹配:
- 你定义的
dataBase中,所有对象的密码字段名是全小写的password - 但校验判断语句中,你读取的是
dataBase[i].passWord(W为大写格式),这个属性在数据库对象中不存在,读取结果永远是undefined,和传入的passWord比对永远不成立,所以函数始终返回false。
修复方案
把判断语句中的属性名改为和定义一致的小写即可:
// 修改前(错误) if (dataBase[i].username === userName && dataBase[i].passWord === passWord) // 修改后(正确) if (dataBase[i].username === userName && dataBase[i].password === passWord)
拓展提示
- JavaScript的属性名是大小写敏感的,书写时要严格保持一致
- 调试这类问题可以在循环中打印
dataBase[i]、dataBase[i].passWord的值,很快就能定位到属性读取失败的问题 - 修复属性名后如果还有异常,可以排查:传入的账号密码大小写/前后空格和数据库值不一致、调用函数时参数传递顺序错误两个常见场景
内容的提问来源于stack exchange,提问作者Cristian M.
相关产品推荐
相关产品推荐

