【发布时间】:2016-05-08 03:48:34
【问题描述】:
我需要执行&& 语句的两边,但如果第一部分返回false,则不会发生这种情况。示例:
function doSomething(x) {
console.log(x);
}
function checkSomething(x) {
var not1 = x !== 1;
if (not1) doSomething(x);
return not1;
}
function checkAll() {
return checkSomething(1)
&& checkSomething(3)
&& checkSomething(6)
}
var allValid = checkAll(); // Logs nothing, returns false
这里的问题是doSomething(x)应该记录3和6,但是因为checkSomething(1)返回false,其他的检查不会被调用。 运行所有检查并返回结果的最简单方法是什么?
我知道我可以将所有值保存在变量中并随后检查它们,但是当我进行大量检查时,这看起来不是很干净。我正在寻找替代品。
【问题讨论】:
-
I know I could save all the values in variables and check those subsequently你已经知道答案了,不幸的是它不像你说的那么漂亮。 -
为什么需要知道所有检查的结果?
return语句不是暗示你想知道 all 检查是否返回true?然后你也不需要评估所有的检查......如果你想单独获得每个检查的结果,那么使用来自 A.Wolff 的数组文字的建议。 -
您的
checkSomething同时处理两个单独的任务,这通常是不好的做法,会导致这样的问题。根据实际用例,如果doSomething必须运行两次,您应该单独执行该任务,而不是依赖它作为checkSomething的一致副作用。 -
短路的一点是,一旦知道逻辑表达式的结果,表达式的以下部分将不会改变结果,所以为什么要运行它们。你不是这样吗?所以,一旦你找到一个
false值,三个&&操作的整体结果永远不会是true,那么为什么要执行它们呢?除非你在表达式的那些部分有副作用(这是一种邪恶的编码方式)。修复你的代码,而不是用这种方式编写代码。 -
不,它肯定会解决这个问题。您不需要为每个返回值使用一个变量,您只需要一个标志来检查其中至少一个是否返回 false。
标签: javascript if-statement design-patterns boolean