在下面的代码中:
console.log( (false || "test") ? "first" : "second") );
第一部分的 o/p 是 test (false || "test") ,那么我最后的 o/p 怎么样呢?当条件运算符无法将表达式计算为 True 或 False 时,通常会发生什么?
在下面的代码中:
console.log( (false || "test") ? "first" : "second") );
第一部分的 o/p 是 test (false || "test") ,那么我最后的 o/p 怎么样呢?当条件运算符无法将表达式计算为 True 或 False 时,通常会发生什么?
javascript 中的每个值,无论其类型如何,都可以强制转换为布尔值。
强制要求false
的值称为“假”,强制要求true
的值称为“真”。
在这种情况下:
(false || "test") ? "first" : "second")
(false || "test")
逻辑上等价于("test")
sincefalse || X
等价于(如果您对逻辑感兴趣,X
这称为析取三段论)。
javascript 中的任何非空字符串(包括 string 'false'
,对那个 bug 有乐趣)都会强制转换为true
,因此第三条件评估为true
并记录'first'
。
“当条件运算符无法将表达式评估为 True 或 False 时,一般会发生什么?”
JavaScript 中的每个表达式都可以被评估为true
orfalse
因为每个类型都可以强制转换为布尔值。
在您的代码中,"test"
操作数将被有效地评估为Boolean("test")
,即true
。
强制为 的值false
是:
false
(明显地)NaN
""
(一个空字符串)0
null
undefined
其他一切都考虑在内true
。
如果||
左侧为真,则运算符返回左侧,否则返回右侧。
因此(false || "test")
是"test"
。
"test"
是一个真实的价值,所以你得到:
"test" ? "first" : "second"
:
如果前面的值?
是真值(即是),则三元运算符返回前面的值。
当条件运算符无法将表达式计算为 True 或 False 时,通常会发生什么?
任何表达式的结果都可以被评估为真值或假值,因此这永远不会发生。
因为 Javascript 隐式转换test
为true
. 在将字符串转换为布尔值时,Javascript 将非空字符串转换为 ,将空字符串转换true
为false
.
因此,由于运算符的第一个操作数||
是false
,因此false || "test"
表达式将返回第二个参数,然后将其转换为 true。所以你会得到first
你的输出。