为什么JavaScript的逻辑AND(&&)与if条件不一样?

DaK*_*KaZ 2 javascript conditional node.js

我已经做了很长时间的JS开发,多年来我以为我可以使用逻辑AND来短路条件语句.事实上,我在条件渲染的React组件中一直这样做.但事实证明它并不像我期望的那样有效.问题是,为什么?

以下是Node 8.15.0的示例:

> a = 0.0
0
> a && console.log(a)
0
> if(a) console.log(a)
undefined
> !!a && console.log(a)
false

Run Code Online (Sandbox Code Playgroud)

具体来说,为什么a && console.log(a)不行一样if (a) console.log(a)

Est*_*ask 6

if(a) ...是一份声明.a && ...是一种表达.

此行为特定于控制台.如果一行评估表达式,则输出结果,否则认为是对行进行了求值undefined.

a && ...是一个短路.这意味着如果a是假的,表达式的计算结果为a.如果a是真实的,则表达式被评估为....

这不会影响在实际应用程序中使用它们的方式而不是控制台.如果不使用评估结果,则两者if和短路评估都以相同的方式起作用,即...仅在条件真实时进行评估.