如何在不使用||的情况下编写或编写函数运营商? !和&&是允许的。
var output = or(true, false);
console.log(output); // --> true;
答案 0 :(得分:7)
您必须要合并两个基本tautologies。对于任何a, b
:
!(a && b)
当且仅当!a || !b
!!a
当且仅当a
因此a || b
当且仅当!(!a && !b)
如此
function or(a, b) {
return !(!a && !b);
}
令人遗憾的是,如果a, b
是布尔值,则这是唯一的。请注意,JavaScript中的||
运算符具有副作用:
> var a = 'foo';
> var b = 'bar';
> a || b
'foo'
但
> !(!a && !b)
true
我怀疑这可以通过!
和&&
完成。但是,这可以在没有||
的情况下实现:
function or(a, b) {
if (a) {
return a;
}
return b;
}
这仍然与||
不是100%相同。这是因为a || b
仅在b
为假时评估a
。特别是对于函数f() || g()
,仅当g()
为false时才会评估调用f()
。所以这是||
的另一个副作用,我认为根本不能通过函数来模拟它。
答案 1 :(得分:1)
or
何时为真?
每当A为真或B为真时 - 但答案包括单词"或"。
所以让我们换一种说法:只要情况不是A都是假而B是假的。
答案 2 :(得分:1)
!a && !b = !(a || b)
!a || !b = !(a && b)
!(a || b) = (a || b) else
所以回答你的问题
!a && !b else // this is the or
但这是一件可怕的事情。使用正逻辑和所有可用工具使您的代码可读。
答案 3 :(得分:0)
你问这样的事吗?
var a;
var b = 3;
console.log(a || b);
console.log(!a && b);

答案 4 :(得分:0)
仅仅因为我想向自己证明原始问题是完全可能的;)而且我没有使用|
function or(a, b){
var c = console.log;
console.log = function(input) {
c.apply(console, [input]);
window.output = !window.output;
}
return !(!a && !b);
}
// OP Question
var output = or(true, false);
console.log(output); // --> true;
console.log(output); // --> false;