Javascript 使用IF控件结构在JS中进行验证的正确方法是什么

Javascript 使用IF控件结构在JS中进行验证的正确方法是什么,javascript,controls,conditional-statements,Javascript,Controls,Conditional Statements,我想知道哪个控制结构处理验证更好 我尝试了if-else if和if->return。。。如果->返回 哪个更好、更容易理解 if(user.name == null) { errorMessage ('insert name') } else if (user.age == null) { errorMessage('Insert age') } else { insertUser(user) } 或 这些都是不等价的,所以这不是一个问题,哪一个是更好的风格 如果使用第一个代码块

我想知道哪个控制结构处理验证更好

我尝试了if-else if和if->return。。。如果->返回

哪个更好、更容易理解

if(user.name == null) {
  errorMessage ('insert name')
} else if (user.age == null) {
  errorMessage('Insert age')
} else {
  insertUser(user)
}


这些都是不等价的,所以这不是一个问题,哪一个是更好的风格

如果使用第一个代码块,
name
null
age
也为
null
,会发生什么情况?答:您将只设置名称,并且年龄将保持
null

所以你应该使用第二块


此外,代替检查<代码>(A==NULL)< /C> >,一般应考虑使用如<代码>(如果!)< < /代码>。这不仅可以处理

null
值,还可以处理其他一些错误值(例如
未定义的
'
等)

就性能而言,它们是相同的

关于代码可读性,我更喜欢后者

对于维护,越晚越好,因为您可能希望稍后列出所有错误的列表,这将更容易实现

那么:

try {
    check(user.name, 'insert name');
    check(user.age, 'insert age');
    ...
    insertUser(user);
} catch(e) {
    // handle e
}

const check = (value, message) => {
   if (!value) {
       throw `${message}`;
   }
};

更好的方法是首先收集所有错误。然后检查是否有任何错误,如果没有发现错误,最后插入用户


const errors = ['name', 'age'].forEach( field => {
 if(user[field] === null) {
  return `${field} is required`
 }
})

if (errors.length === 0) {
 insertUser(user)
} else {
 showErrors(errors)
}


如果
name
null
age
也为
null
,则两者的作用相同。我个人喜欢第二个版本,尤其是如果你想连接你的错误而不是只显示第一个遇到的错误。但正如OP在上面写的,他们也会这么做。@Keith,他们怎么会这么做?!一个是
if-else if-else
,另一个是两个连续的if。哦,我没有注意到那里的
return
语句。很抱歉是的,他们也会这么做。他们在执行方面是一样的,所以不知道为什么这一个会被否决。公认的答案是错误的->
这些不是等价的
它们有不同的流程,但我的意思是性能是相同的,我同意你的看法。我认为你的答案应该被接受,你当然不应该被否决。

const errors = ['name', 'age'].forEach( field => {
 if(user[field] === null) {
  return `${field} is required`
 }
})

if (errors.length === 0) {
 insertUser(user)
} else {
 showErrors(errors)
}