if(isValid(id) && isValid(id2)) {
//do sth..
}
我想检查 id 和 id2 是否有效,如果不是,它将输出错误消息并返回 false。
短路评估的问题是如果它是假的,只会输出一个错误消息。
如果它们都是错误的,有什么方法可以输出两条错误消息?
if(isValid(id) && isValid(id2)) {
//do sth..
}
我想检查 id 和 id2 是否有效,如果不是,它将输出错误消息并返回 false。
短路评估的问题是如果它是假的,只会输出一个错误消息。
如果它们都是错误的,有什么方法可以输出两条错误消息?
手动执行它们并计算错误:
var errors = 0;
if(!isValid(id)) {
++errors;
}
if(!isValid(id2)) {
++errors;
}
if(errors > 0) {
// complain and return
}
// Do whatever needs to be done when everything is valid
假设 isValid 显示了您需要确保所有方法调用在 if 被评估之前发生的错误消息。如果您想保持几乎相同的代码结构,这有点像 hack,但可以。它的工作原理是创建一个包含所有结果的数组,然后寻找一个错误的项目。
if([isValid(id), isValid(id2)].indexOf(false) == -1) {
//all items are valid
}
var firstValid = false;
if (isValid(id) && (firstValid=true) && isValid(id2)){
// do the things for everything is valid
}else if (!firstValid && isValid(id2)){
// do other things
}
或者怎么样
var firstValid = false;
if (isValid(id) && (firstValid=true) && isValid(id2) || firstValid && isValid(id2)){
// do stuff
}
我个人不建议这样做或实际生产代码中显示的任何其他技巧,尽管短路用于使您的代码更快。
也许更新 UI 应该在验证检查之外完成,或者可能应该对两者进行一次检查以更新正确的 UI 部分。我不确定您的应用程序的全部细节,但我建议您多花一点时间来思考您遇到问题的原因,而不是解决问题的最佳方法。