为什么 (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
是假的(例如 ''
、null
、undefined
、0
),javascript 就不是'无论如何,不需要计算表达式的其余部分,因为它是 false
。但是它不是 return false
,而是第一个 falsy 值。但是,如果 a
为真,则需要计算其余部分才能知道表达式的结果。
你在使用||
时有相反的逻辑。
现在在你的例子中,{}
是真实的,所以
(true && {}) // {}
({} && true) // true
({} && true && 42 && '' && true && {}) // '' as first falsy value
这是由于 JavaScript 中的真假逻辑。所有不是 undefined
、null
、false
或 0
的对象都是真实的。 &&
和 ||
操作数从左到右计算并短路。表达式的计算结果为最后计算的操作数的值。例如:
true && false // will evaluate to false
true || false // will evaluate to true
如题所说,我不太明白为什么(true && {})给我的是{},反过来就不一样了
编辑:作为后续,因为我使用的是布尔运算符,为什么这个表达式在求值时没有给我一个布尔值?
&&
的表达式操作数从左到右求值。 &&
表达式的值是最后计算的子表达式的值。在您的情况下,这将是两种情况下最右边的表达式。
因此,对于 (true && {})
,&&
运算符首先计算 true
。它不是假的,所以它然后评估 {}
和 returns 该表达式结果。
对于 ({} && true)
它向后做同样的事情,所以计算的第二个表达式是 true
.
a
是假的,a && b
将 return a
,否则 b
.
确实,如果 a
是假的(例如 ''
、null
、undefined
、0
),javascript 就不是'无论如何,不需要计算表达式的其余部分,因为它是 false
。但是它不是 return false
,而是第一个 falsy 值。但是,如果 a
为真,则需要计算其余部分才能知道表达式的结果。
你在使用||
时有相反的逻辑。
现在在你的例子中,{}
是真实的,所以
(true && {}) // {}
({} && true) // true
({} && true && 42 && '' && true && {}) // '' as first falsy value
这是由于 JavaScript 中的真假逻辑。所有不是 undefined
、null
、false
或 0
的对象都是真实的。 &&
和 ||
操作数从左到右计算并短路。表达式的计算结果为最后计算的操作数的值。例如:
true && false // will evaluate to false
true || false // will evaluate to true