JavaScript中的短路评估?
我不明白下面的代码是如何工作的。我知道AND和OR之间的区别,但这段代码把我弄糊涂了JavaScript中的短路评估?,javascript,node.js,Javascript,Node.js,我不明白下面的代码是如何工作的。我知道AND和OR之间的区别,但这段代码把我弄糊涂了 console.log(3 === 3 && 'cow' && console.log(34)); 3==3为true,因此用于下一个语句 console.log( true && 'cow' && console.log(34)); console.log( true && true && console.l
console.log(3 === 3 && 'cow' && console.log(34));
3==3
为true
,因此用于下一个语句
console.log( true && 'cow' && console.log(34));
console.log( true && true && console.log(34));
'cow'
是true
,因为它是一个非空字符串文本,因此下一条语句
console.log( true && 'cow' && console.log(34));
console.log( true && true && console.log(34));
console.log(34)
执行函数,打印34
,返回未定义的
console.log( true && true && undefined);
打印未定义的
console.log( true && true && undefined);
最后,在控制台中,您将
34
undefined
前两个布尔结果,3==3
和'cow'
,计算结果均为true。这意味着还需要对最终表达式求值,以查看整个表达式是真是假
评估console.log(34)
有一个副作用,就是将34
打印到控制台上,这样第一行就会出现
console.log(34)
没有返回类型,因此其计算结果为未定义
。使用undefined
与任何truthy值进行anding的结果也是undefined
,因此整个表达式3==3&&“cow”&&console.log(34)
计算结果为undefined
。这是在34
之后打印到控制台的,该代码中没有发生短路。哪一部分让您感到困惑?它是否输出了一些你不知道的东西?如果是这样,您希望它输出什么呢?3===3
的结果是true
。。。'cow'
的结果是truthy
。。。console.log(34)
的结果是未定义的
-谜团是什么?为什么是第二个&为什么不只是console.log。。。。。您在哪里找到它的?为什么第二个&&为什么不只是console.log,因为语句是从左到右求值的