0
if(isValid(id) && isValid(id2)) {
    //do sth..
}

我想检查 id 和 id2 是否有效,如果不是,它将输出错误消息并返回 false。

短路评估的问题是如果它是假的,只会输出一个错误消息。

如果它们都是错误的,有什么方法可以输出两条错误消息?

4

3 回答 3

0

手动执行它们并计算错误:

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
于 2013-11-07T05:52:32.547 回答
0

假设 isValid 显示了您需要确保所有方法调用在 if 被评估之前发生的错误消息。如果您想保持几乎相同的代码结构,这有点像 hack,但可以。它的工作原理是创建一个包含所有结果的数组,然后寻找一个错误的项目。

if([isValid(id), isValid(id2)].indexOf(false) == -1) {
    //all items are valid
}
于 2013-11-07T05:53:17.190 回答
0
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 部分。我不确定您的应用程序的全部细节,但我建议您多花一点时间来思考您遇到问题的原因,而不是解决问题的最佳方法。

于 2013-11-07T06:03:50.493 回答