如何使用逻辑运算导致Javascript?

时间:2017-10-04 10:41:52

标签: javascript html

(我以不同的方式解决了这个问题,我刚回来重新审视它。)

几天前,我想运行多个功能,并检查是否所有功能都成功运行。出于这个原因,我尝试以某种方式运行它:

<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}; &amp;&amp;&amp;&amp;&amp;&amp;部分。通常我应该得到函数的结果,而不是整个函数。谁能解释为什么会这样?

3 个答案:

答案 0 :(得分:2)

function y() {return true} 声明 一个函数,它永远不会调用函数。因此,您与&&进行比较的两个值是两个函数对象,而不是您调用它们时返回的值。函数对象是 truthy &&运算符不会返回truefalse,它会返回其中一个操作数(如果第一个是 falsey 则返回第一个,否则返回第二个)。因此<function object> && <function object>的结果是第二个函数对象。

答案 1 :(得分:1)

  

任何人都可以解释为什么会这样吗?

您只需声明函数body,但您需要invoke/call它们才能找到返回的值。

您应该使用IIFE才能使用self-invoking个功能。

详细了解Immediately-invoked function expression

&#13;
&#13;
//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})();
&#13;
<p id="example"></p>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

关于JavaScript AND运算符的documentation非常明确:

  

运算符:逻辑AND(&amp;&amp;)

     

用法:expr1&amp;&amp;表达式2

     

描述:如果可以转换为false,则返回expr1;否则,返回expr2。

所以,例如,如果你有两个字符串:

console.log("Dog" && "Cat")

第二个将被退回。

在您的示例中,函数是真实的。因此,返回第二个:

console.log(function x() {return true} && function y() {return true})