(我以不同的方式解决了这个问题,我刚回来重新审视它。)
几天前,我想运行多个功能,并检查是否所有功能都成功运行。出于这个原因,我尝试以某种方式运行它:
<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;部分。通常我应该得到函数的结果,而不是整个函数。谁能解释为什么会这样?
答案 0 :(得分:2)
function y() {return true}
仅 声明 一个函数,它永远不会调用函数。因此,您与&&
进行比较的两个值是两个函数对象,而不是您调用它们时返回的值。函数对象是 truthy 。 &&
运算符不会返回true
或false
,它会返回其中一个操作数(如果第一个是 falsey 则返回第一个,否则返回第二个)。因此<function object> && <function object>
的结果是第二个函数对象。
答案 1 :(得分:1)
任何人都可以解释为什么会这样吗?
您只需声明函数的body
,但您需要invoke/call
它们才能找到返回的值。
您应该使用IIFE
才能使用self-invoking
个功能。
详细了解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})();
&#13;
<p id="example"></p>
&#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})