JavaScript中的短路评估?

时间:2018-01-26 01:18:51

标签: javascript node.js

我不明白以下代码的工作原理。我知道AND和OR之间的区别,但这段代码让我很困惑。

 console.log(3 === 3 && 'cow' && console.log(34));

2 个答案:

答案 0 :(得分:0)

console.log(3 === 3 && 'cow' && console.log(34)); 

3 === 3true,因此用于下一个语句

console.log( true && 'cow' && console.log(34));

'cow'true,因为它是非空字符串文字,因此是下一个语句

console.log( true && true && console.log(34));

console.log(34)执行功能,打印34,返回undefined

console.log( true && true && undefined);

打印undefined

所以最后在控制台中你会有

34 
undefined

答案 1 :(得分:0)

前两个布尔结果3 === 3'cow'都评估为true。这意味着还需要评估最终表达式以查看整个表达式是真还是假。

评估console.log(34)会产生将34打印到控制台的副作用,以便首先显示该行。

console.log(34)没有返回类型,因此其评估结果为undefined。使用undefined和任何真实值的结果也是undefined,因此整个表达式3 === 3 && 'cow' && console.log(34)的计算结果为undefined。这将在34之后的行上打印到控制台。