结论:必须用===严格比较并完整组织if分支逻辑。因==会触发隐式转换导致安全漏洞,需先校验空值、再严格比对凭证、成功后设置token或跳转、失败给出明确提示,且DOM操作前须确保元素存在。
直接说结论:用
==
或
===
比较用户输入与预设凭证,再用
if
分支控制跳转或提示,但必须避开明文硬编码、弱比较漏洞和未处理的空值。
为什么不能只用
==
判断用户名密码
JavaScript 中
==
会触发隐式类型转换,导致意外通过验证。比如
"0" == false
为
true
,若密码是
"0"
而后端返回
false
(或空数组、
0
),就可能绕过校验。
永远优先用
===
,它同时比对值和类型
服务端校验不可省略——前端
if
只是体验优化,不是安全防线
避免把密码写死在代码里:
if (inputPass === "123456")
是严重风险
登录校验中
if
分支该怎么组织逻辑
典型流程是先检查输入是否为空,再比对凭证,最后按结果执行动作。顺序错乱会导致报错或逻辑漏洞。
先用
if (!username || !password)
拦截空提交,防止后续出错
再用
if (username === expectedUser && password === expectedPass)
做严格匹配
匹配成功后,别只写
console.log("登录成功")
,要真实跳转或设置 token:
localStorage.setItem("auth", "true")
所有分支都要覆盖:
else
必须给出明确反馈,比如
document.getElementById("error").textContent = "账号或密码错误"
常见报错:
Cannot read property 'value' of null
怎么修
这个错误说明你试图读取一个不存在的 DOM 元素的
value
,通常是因为
getElementById
返回
null
,而你没做判断就直接取值。
确保 HTML 中 input 的
id
和 JS 里写的完全一致(大小写敏感)
在取值前加保护:
const userEl = document.getElementById("username"); if (!userEl) return;
更稳妥写法:
const username = document.getElementById("username")?.value || ""
(可选链 + 空值合并)
脚本必须在 DOM 加载完成后执行,否则元素还没生成——把 JS 放在