JavaScript中IF ELSE语句后无法调用window.location.replace问题求助
登录跳转失败的问题分析与修复方案
嘿,我看你这段登录逻辑的问题出在数组匹配的判断逻辑上,咱们一步步拆解清楚:
先说说你代码里的核心问题
先把你贴的关键代码拎出来:
function LoginWithEmail(){ var email = curEmail.indexOf(emailLogin.value); var password = curPass.indexOf(passLogin.value); if(emailLogin.value === curEmail[email] && passLogin.value === curPass[password]){ return window.location.replace("admin-dashboard.php"); }else{ alert("Your email or password are empty or wrong!"); return false; } }
这里有两个明显的逻辑漏洞:
- 多余的对比逻辑:
indexOf如果找到匹配的邮箱,返回的是它在curEmail数组里的索引,这时候curEmail[email]就是你输入的邮箱值,这个对比完全是重复的;但如果输入的邮箱不在数组里,email会是-1,curEmail[-1]是undefined,这时候输入值和undefined对比肯定不成立,直接进else。 - 邮箱密码的索引不绑定:你分别找邮箱在邮箱数组的索引、密码在密码数组的索引,但这两个索引可能根本不对应同一个用户!比如用户A的邮箱在索引0,密码在索引1,这种情况下判断会把完全不匹配的组合当成正确的。
修复后的正确代码
假设你的curEmail和curPass是按用户对应索引存储的(比如curEmail[0]是用户1的邮箱,curPass[0]就是用户1的密码),正确的逻辑应该是这样:
function LoginWithEmail(){ // 先拿到输入值,顺便去除首尾空格 const inputEmail = emailLogin.value.trim(); const inputPass = passLogin.value.trim(); // 先做非空校验,提前拦截空输入 if(!inputEmail || !inputPass){ alert("Please fill in both email and password!"); return false; } // 找到输入邮箱在数组里的索引 const userIndex = curEmail.indexOf(inputEmail); // 检查索引有效(说明邮箱存在),且对应索引的密码匹配 if(userIndex !== -1 && curPass[userIndex] === inputPass){ window.location.replace("admin-dashboard.php"); return; }else{ alert("Your email or password is wrong!"); return false; } }
额外给你几个优化小建议
- 单独做非空校验,提示更精准,用户能清楚知道是没填还是填错了
- 用
const代替var,避免变量提升带来的潜在问题 - 生产环境绝对不要用明文数组存密码!这太不安全了,建议改成后端接口校验密码
内容的提问来源于stack exchange,提问作者Punch Andy
相关产品推荐
相关产品推荐

