有人可以看看这段代码吗?显然他们不是等同的。
这是我原来的代码,它没有按照我的意愿行事。基本上,我想要的是仅在定义变量时验证变量。忽略日志。他们是为了调试。 这不能按预期工作
let { fullName, email, password } = userInformation;
if(email){
console.log("EMAIL IS DEFINED");
if(!validator.isEmail(email)) {
errors.email = "Please enter a valid email address";
}
}
if(fullName){
console.log("FULLNAME IS DEFINED");
if(validator.isEmpty(fullName)){
errors.fullName = "Fullname is required";
}
}
if(password){
console.log("PASSWORD IS DEFINED");
if(validator.isEmpty(password)){
errors.password = "Password is required";
}
}
这可以按预期工作。为什么会这样?
let { fullName, email, password } = userInformation;
if(!email){
console.log("EMAIL IS DEFINED");
if(!validator.isEmail(email)) {
errors.email = "Please enter a valid email address";
}
}
if(!fullName){
console.log("FULLNAME IS DEFINED");
if(validator.isEmpty(fullName)){
errors.fullName = "Fullname is required";
}
}
if(!password){
console.log("PASSWORD IS DEFINED");
if(validator.isEmpty(password)){
errors.password = "Password is required";
}
}
编辑:基本上我想要发生的是如果变量是 DEFINED 则运行验证。目前的情况是,除非我喜欢第二个例子,否则它无法验证
答案 0 :(得分:3)
您的支票无法检查undefined
,他们会检查 falsiness 。 ""
是假的。 0
,NaN
,null
,undefined
,当然还有false
也是如此。
由于""
是假的,如果userInformation
的{{1}}属性值为fullName
,则此功能不起作用:
""
您永远不会进入外部if(fullName) {
console.log("FULLNAME IS DEFINED");
if(validator.isEmpty(fullName)){
errors.fullName = "Fullname is required";
}
}
,因此您永远不会使用验证工具来检查if
。
如果您希望绕过验证器(如果值为fullName
),则具体(因为该属性在undefined
上不存在,或者它已存在但值为userInformation
),你需要具体:
undefined
如果您希望仅在if (fullName !== undefined) {
console.log("FULLNAME IS DEFINED");
if(validator.isEmpty(fullName)){
errors.fullName = "Fullname is required";
}
}
没有属性的情况下绕过您的验证器(但如果它确实具有值{{},请继续使用验证器1}},然后你需要专门检查:
userInformation