你怎么用!和&&而不是||?

时间:2016-11-18 19:59:08

标签: javascript

如何在不使用||的情况下编写或编写函数运营商? !和&&是允许的。

var output = or(true, false);
console.log(output); // --> true;

5 个答案:

答案 0 :(得分:7)

您必须要合并两个基本tautologies。对于任何a, b

  1. De Morgan定律:!(a && b)当且仅当!a || !b
  2. 双重否定:!!a当且仅当a
  3. 因此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;

相关问题