如何在Javascript中使用逻辑运算?
(我以不同的方式解决了这个问题,我刚回来重新访问它。)如何在Javascript中使用逻辑运算?
几天前,我想运行多个函数,并检查它是否全部运行成功。出于这个原因,我试图以某种方式运行它:
<p id="example"></p>
<script>
document.getElementById("example").innerHTML = true && true;
</script>
按预期运行,“真”出现在p中。所以我做了更奇特的是:
document.getElementById("example").innerHTML = function x() {return true} && true;
和以前一样,它的工作如预期(实际上,我宣布命令之外的功能,我只是融合他们节省空间),但是,在那之后,我得到了一些怪异的结果:
document.getElementById("example").innerHTML = function x() {return true} && function y() {return true};
是什么奇怪的,我在p里面得到的结果是:function y() {return true};
的& &部分后,我莫名其妙地收到命令的其余部分。通常我应该得到功能的结果,而不是整个功能。任何人都可以解释为什么会发生?
任何人都可以解释为什么会发生?
你只申报的功能的body
但你需要invoke/call
他们为了找出返回值。
您应该使用IIFE
以便使用self-invoking
函数。
查看更多about Immediately-invoked function expression。
//document.getElementById("example").innerHTML = true && true;
//document.getElementById("example").innerHTML = function x() {return true} && true;
document.getElementById("example").innerHTML = (function x() {return true})() && (function y() {return true})();
<p id="example"></p>
function y() {return true}
仅仅声明的功能,它永远不会调用功能。因此,与&&
比较的两个值是两个函数对象,而不是这些函数返回的值。功能对象为truthy。 &&
运营商不返回true
或false
,它返回其操作数之一(如果第一个是falsey,否则第二个)。所以<function object> && <function object>
的结果是第二个函数对象。
的documentation关于JavaScript和运营商是非常明确的:
操作:逻辑和(& &)
使用:表达式1 & &表达式2
说明:如果可以将其转换为false,则返回expr1;否则,返回expr2。
所以,举例来说,如果你有两个字符串:
console.log("Dog" && "Cat")
第二个将被退回。
在你的例子中,函数是truthy。因此,第二个是返回:
console.log(function x() {return true} && function y() {return true})
显然,我做了2次失误,但我不能接受两个答案。只声明函数但不调用它们,并且使用&&错误的方法。感谢Alexandru-Ionut Mihai和Gerardo Furtado! – kry