为什么这种检查undefined的方法不起作用?

时间:2017-04-19 14:15:11

标签: javascript

有人可以看看这段代码吗?显然他们不是等同的。

这是我原来的代码,它没有按照我的意愿行事。基本上,我想要的是仅在定义变量时验证变量。忽略日志。他们是为了调试。 这不能按预期工作

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 则运行验证。目前的情况是,除非我喜欢第二个例子,否则它无法验证

1 个答案:

答案 0 :(得分:3)

您的支票无法检查undefined,他们会检查 falsiness ""是假的。 0NaNnullundefined,当然还有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