JavaScript新手编写的密码检查器无输出问题求助
代码问题排查与修正
嘿,我来帮你把代码里的问题一个个揪出来,这些小细节直接导致了你的代码没有任何输出:
主要错误点
- 字符串未加引号:
var pass = ji3or;里的ji3or是字符串字面量,必须用单引号或双引号包裹,否则JS会把它当作变量名,找不到对应变量时会直接抛出ReferenceError,代码执行直接中断。正确写法:var pass = "ji3or"; - 函数定义语法错误:
function passCheck {缺少了括号,函数定义必须带括号(即使没有参数),正确写法:function passCheck() { - 对象结构不合法:你定义的
variations对象中,每个校验项的格式有误。比如digits:{ /\d/.test(pass),errorMsg:"..." },第一个部分是布尔值但没有对应的键名,JS无法识别这个结构。需要给校验结果添加一个明确的键(比如valid),改成:digits: { valid: /\d/.test(pass), errorMsg: "Must contain at least 1 digit!" } - 缺失遍历执行逻辑:你提到要用
forEach遍历校验项,但代码里没有实现这部分逻辑,所以即使前面的问题都修复,也不会输出任何内容。
修正后的完整代码
var pass = "ji3or"; function passCheck() { var variations = { digits: { valid: /\d/.test(pass), errorMsg:"Must contain at least 1 digit!"}, lower: { valid: /[a-z]/.test(pass), errorMsg:"Must contain at least 1 lower case letter!"}, upper: { valid: /[A-Z]/.test(pass), errorMsg:"Must contain at least 1 upper case letter!"} }; // 遍历所有校验项,输出不通过的错误信息 Object.values(variations).forEach(item => { if (!item.valid) { console.log(item.errorMsg); } }); } // 调用函数执行校验逻辑 passCheck();
代码说明
- 给
pass变量添加了字符串引号,避免变量未定义错误; - 修正了函数定义的语法错误;
- 给每个校验项添加了
valid键,让对象结构合法可识别; - 使用
Object.values()获取所有校验项的数组,再用forEach遍历,判断valid为false时打印对应错误信息; - 最后调用
passCheck()函数触发整个校验流程。
现在运行这段代码,就能看到对应的错误输出啦~
内容的提问来源于stack exchange,提问作者Akuzuki29087
相关产品推荐
相关产品推荐

