写一个函数'或'没有|| 给定2个布尔表达式,“或”返回true或false,对应于||运营商。 *应该使用!和&&
function or(expression1, expression2) {
return !expression1 && expression1 && !expression2 && expression1
}
我已经尝试过了,但与此同时我对这个问题究竟是什么感到困惑
预期产出:
var output = or(true, false);
console.log(output); // --> true;
答案 0 :(得分:4)
使用De Morgan's laws进行一些基本考虑:
!(a && b) = !a || !b
!(a || b) = !a && !b
function or(a, b) {
return !(!a && !b);
}
console.log(or(false, false)); // false
console.log(or(false, true)); // true
console.log(or(true, false)); // true
console.log(or(true, true)); // true
答案 1 :(得分:2)
这是工作解决方案
function or(a, b){
if(!a && !b)
return false
return true;
}
console.log(or(true, true));
console.log(or(true, false));
console.log(or(false, true));
console.log(or(false, false));
希望这会有所帮助!!
答案 2 :(得分:0)
他们要求您展示的概念是称为NAND或非AND
NAND是电子学中最常见的逻辑运算符类型,可用于表示所有其他逻辑。
您可以在此处找到您应该建模的内容:https://en.wikipedia.org/wiki/NAND_logic#OR
答案 3 :(得分:0)
您的实施:
return !a && b && !a && b
对于true
和false
,评估为:
return !true && true && !false && false;
即
return false && true && true && false;
由于延迟评估,它甚至不会在第一个false &&
之后评估任何内容,因为false && x
为假,无论x
的值是多少。对于任何输入,其中一个术语是false
,因此它将始终返回false。
如果你把它分成更小的部分可能会有所帮助:
boolean bothFalse = !a && !b
boolean notBothFalse = !bothFalse;
return notBothFalse;
但是使用括号()
,您可以在一行中表达这一点。我会留下这个练习给你。