为什么`("" || "word") == true` returns false?
Why `("" || "word") == true` returns false?
我正在学习JavaScript,对此我真的很困惑。
谁能解释这是怎么可能的:
"" || "word" // -> "word"
("word") && true // -> true
("" || "word") == true // -> false
我尝试在线搜索,但找不到合适的词来描述我的问题。
JavaScript 比 true
或 false
更真实。
也有真值和假值之分,非真即假。
false
、0
、""
、null
、undefined
和 NaN
是假的。
其他都是真的。
逻辑运算符对真实和虚假的事物进行运算;
a && b
是
a
,如果 a
是假的
- 否则就是
b
和
a || b
是
a
,如果 a
是真实的
- 否则就是
b
(如果您熟悉 Lisp 或 Python,这很自然。如果您不熟悉,您可能会想 "WAT?!"。)
因此,
"" || "word" -> "word"
因为""
是假的,
"word" && true -> true
因为 "word"
是真实的,并且
("" || "word") == true -> false
因为"" || "word"
是"word"
,而"word"
和true
不是同一个对象。
我假设你理解前两个布尔值,但对最后一个有点困惑。
你的问题是,如果前 2 个是 true
,为什么最后一个不是 true
。
Javascript中有thruthy
和falsey
值的概念。 thruthy
值可能是也可能不是 Boolean
,但仍满足 if
条件。
例如,对于字符串,空字符串是 falsey
值,即使只有一个字符的字符串也是 thruthy
.
A truthy
值 等于 到 true
,但不 等于 到 true
. falsey
.
相同
在最后一种情况下,("" || "word") == true
,左边部分等于word
,并且使用的运算符==
检查左边的值是否等于右边的值。所以 word
不等于 true
,因此 returns false
.
("" || "word") == true // lets simplify
"word" == true // false, "word" is not equal to true
但是如果您在 if
条件下使用 word
,它将满足条件,因为它是一个 thruthy
值。
if ("word") { /* condition will be satisfied */ }
if ("") { /* condition will NOT be satisfied */ }
要检查值是否为 truthy
,请在值前使用 !!
。
// String
!!"word" // true
!!"" // false
// Number
!!5 // true
!!0 // false
// Boolean
!!true // true
!!false // false
1。问题 1
"" || "word" // -> "word"
Logical OR (||
)
expr1 || expr2
Returns expr1
if it can be converted to true
; otherwise, returns expr2
.
在这种情况下,第一个表达式""
is falsy,因此第二项是表达式的结果。如果第一个表达式为真,则不会计算第二项,而第一项将被 returned.
2。问题 2
("word") && true // -> true
Logical AND (&&
)
expr1 && expr2
Returns expr1
if it can be converted to false
; otherwise, returns expr2
.
此处第一个表达式为真,因此 JavaScript return 为最后一个。如果第一个是假的,那么 return 值就是第一个词。
3。问题 3
("" || "word") == true // -> false
根据第一个表达式结果,这相当于:
"word" == true // -> false
对于 ==
运算符,强制转换的方式不同。 true
is coerced into a string value,即"1"
,显然与"word"
不同。如果第一项是 "1"
或只是 1,它会产生 true
:
"1" == true // -> true
1 == true // -> true
实际使用
如果你有像上一个这样的条件,直接写就可以了:
if ("" || "word") {
console.log('it is truthy!');
}
或者如果您确实需要 true
作为结果,请将其显式转换为布尔值 with !!
:
result = !!("" || "word");
我正在学习JavaScript,对此我真的很困惑。
谁能解释这是怎么可能的:
"" || "word" // -> "word"
("word") && true // -> true
("" || "word") == true // -> false
我尝试在线搜索,但找不到合适的词来描述我的问题。
JavaScript 比 true
或 false
更真实。
也有真值和假值之分,非真即假。
false
、0
、""
、null
、undefined
和 NaN
是假的。
其他都是真的。
逻辑运算符对真实和虚假的事物进行运算;
a && b
是
a
,如果a
是假的- 否则就是
b
和
a || b
是
a
,如果a
是真实的- 否则就是
b
(如果您熟悉 Lisp 或 Python,这很自然。如果您不熟悉,您可能会想 "WAT?!"。)
因此,
"" || "word" -> "word"
因为""
是假的,
"word" && true -> true
因为 "word"
是真实的,并且
("" || "word") == true -> false
因为"" || "word"
是"word"
,而"word"
和true
不是同一个对象。
我假设你理解前两个布尔值,但对最后一个有点困惑。
你的问题是,如果前 2 个是 true
,为什么最后一个不是 true
。
Javascript中有thruthy
和falsey
值的概念。 thruthy
值可能是也可能不是 Boolean
,但仍满足 if
条件。
例如,对于字符串,空字符串是 falsey
值,即使只有一个字符的字符串也是 thruthy
.
A truthy
值 等于 到 true
,但不 等于 到 true
. falsey
.
在最后一种情况下,("" || "word") == true
,左边部分等于word
,并且使用的运算符==
检查左边的值是否等于右边的值。所以 word
不等于 true
,因此 returns false
.
("" || "word") == true // lets simplify
"word" == true // false, "word" is not equal to true
但是如果您在 if
条件下使用 word
,它将满足条件,因为它是一个 thruthy
值。
if ("word") { /* condition will be satisfied */ }
if ("") { /* condition will NOT be satisfied */ }
要检查值是否为 truthy
,请在值前使用 !!
。
// String
!!"word" // true
!!"" // false
// Number
!!5 // true
!!0 // false
// Boolean
!!true // true
!!false // false
1。问题 1
"" || "word" // -> "word"
Logical OR (
||
)
expr1 || expr2
Returnsexpr1
if it can be converted totrue
; otherwise, returnsexpr2
.
在这种情况下,第一个表达式""
is falsy,因此第二项是表达式的结果。如果第一个表达式为真,则不会计算第二项,而第一项将被 returned.
2。问题 2
("word") && true // -> true
Logical AND (
&&
)
expr1 && expr2
Returnsexpr1
if it can be converted tofalse
; otherwise, returnsexpr2
.
此处第一个表达式为真,因此 JavaScript return 为最后一个。如果第一个是假的,那么 return 值就是第一个词。
3。问题 3
("" || "word") == true // -> false
根据第一个表达式结果,这相当于:
"word" == true // -> false
对于 ==
运算符,强制转换的方式不同。 true
is coerced into a string value,即"1"
,显然与"word"
不同。如果第一项是 "1"
或只是 1,它会产生 true
:
"1" == true // -> true
1 == true // -> true
实际使用
如果你有像上一个这样的条件,直接写就可以了:
if ("" || "word") {
console.log('it is truthy!');
}
或者如果您确实需要 true
作为结果,请将其显式转换为布尔值 with !!
:
result = !!("" || "word");