如何在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}; 的& &部分后,我莫名其妙地收到命令的其余部分。通常我应该得到功能的结果,而不是整个功能。任何人都可以解释为什么会发生?

+0

显然,我做了2次失误,但我不能接受两个答案。只声明函数但不调用它们,并且使用&&错误的方法。感谢Alexandru-Ionut Mihai和Gerardo Furtado! – kry

任何人都可以解释为什么会发生?

你只申报的功能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&&运营商不返回truefalse,它返回其操作数之一(如果第一个是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})