为什么 (true && {}) 的计算结果为 {},而 ({} && true) 的计算结果为 true?

Why does (true && {}) evaluate to {}, but ({} && true) evaluates to true?

如题所说,我不太明白为什么(true && {})给我的是{},反过来就不一样了

编辑:作为后续,因为我使用的是布尔运算符,为什么这个表达式在求值时没有给我一个布尔值?

&& 的表达式操作数从左到右求值。 && 表达式的值是最后计算的子表达式的值。在您的情况下,这将是两种情况下最右边的表达式。

因此,对于 (true && {})&& 运算符首先计算 true。它不是假的,所以它然后评估 {} 和 returns 该表达式结果。

对于 ({} && true) 它向后做同样的事情,所以计算的第二个表达式是 true.

如果 a 是假的,

a && b 将 return a,否则 b.

确实,如果 a 是假的(例如 ''nullundefined0),javascript 就不是'无论如何,不​​需要计算表达式的其余部分,因为它是 false。但是它不是 return false,而是第一个 falsy 值。但是,如果 a 为真,则需要计算其余部分才能知道表达式的结果。

你在使用||时有相反的逻辑。

现在在你的例子中,{} 是真实的,所以

(true && {}) // {}
({} && true) // true
({} && true && 42 && '' && true && {}) // '' as first falsy value

这是由于 JavaScript 中的真假逻辑。所有不是 undefinednullfalse0 的对象都是真实的。 &&|| 操作数从左到右计算并短路。表达式的计算结果为最后计算的操作数的值。例如:

true && false // will evaluate to false
true || false // will evaluate to true