Javascript 使用IF控件结构在JS中进行验证的正确方法是什么
我想知道哪个控制结构处理验证更好 我尝试了if-else if和if->return。。。如果->返回 哪个更好、更容易理解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(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)
}