我有一种情况,我想确保在if语句中使用的部分或全部函数都运行,而不管语句是否已经为真。我知道我可以使用按位运算符。
function test1() {
console.log('called1');
return true;
}
function test2() {
console.log('called2');
return false;
}
if(test1() | test2()) {
console.log('done');
}
// called 1
// called 2
// done
if(test1() | test2() | test1() || test2()) {
console.log('done');
}
// called 1
// called 2
// called 1
// done
这是按位或运算符的正确用法吗?我无法在任何地方找到这种用法。
答案 0 :(得分:4)
这是bitwise或operator的正确用法吗?
有效,因为你的函数会返回值(在你的情况下是布尔值),可以成功强制转换为有用的数值(false
=> 0
,{ {1}} => true
),可以一起进行OR运算,当OR一起运行时,会给你一个可以有效强制回布尔值的值。
至于正确,好吧,如果我在代码中看到它,我倾向于认为这是一个错字,而你打算写1
。你至少必须对其进行评论,以表明避免短路的意图。
但它完全有效,并没有突破任何东西的边缘,这是明确指定的行为。