在下面的代码中:
console.log((false ||“test”)?“first”:“second”));
第一部分的o / p是测试(假||“测试”),那么我的最终o / p如何?当条件运算符无法将表达式计算为True或False时,通常会发生什么?
答案 0 :(得分:3)
||
是OR。因此,当需要布尔值时,(false || "test")
等同于"test"
。当需要布尔值时"test"
被强制为true
(0
不会,""
不会,"0"
会被视为{{ 1}})。
As seen,true
使用toBoolean将条件转换为布尔值:
答案 1 :(得分:1)
javascript中的每个值,无论其类型如何,都可以强制转换为布尔值。
强制转换为false
的值称为“falsey”,强制转换为true
的值称为“truthy”。
Here's a fiddle demonstrating this coercion.
在这种情况下:
(false || "test") ? "first" : "second")
(false || "test")
在逻辑上等同于("test")
,因为false || X
相当于X
(如果您对逻辑感兴趣,则称为disjunctive syllogism)
javascript中的任何非空字符串(包括字符串'false'
,都有这个bug的乐趣)强制到true
,因此第三个条件的计算结果为true
并记录{{1 }}
答案 2 :(得分:0)
“当条件运算符无法将表达式计算为True或False时,通常会发生什么?”
JavaScript中的每个表达式都可以评估为true
或false
,因为每种类型都可以强制转换为布尔值。
在您的代码中,"test"
操作数将被有效评估为Boolean("test")
,即true
。
强制为false
的值为:
false
(显然) NaN
""
(空字符串) 0
null
undefined
其他所有内容都被视为true
。
答案 3 :(得分:0)
如果左侧为真,||
运算符返回左侧,否则返回右侧。
因此(false || "test")
为"test"
。
"test"
是 true 值,因此您获得:
"test" ? "first" : "second"
如果:
之前的值是 true 值(也就是),则三元运算符会返回?
之前的值。
当条件运算符无法将表达式计算为True或False时,通常会发生什么?
任何表达式的结果都可以被评估为真值或假值,因此永远不会发生。
答案 4 :(得分:0)
因为Javascript隐式将test
强制转换为true
。在将字符串转换为布尔值时,Javascript会将非空字符串转换为true
,并将字符串清空为false
。
因此,由于||
运算符的第一个操作数是false
,false || "test"
表达式将返回第二个参数,然后将其转换为true。因此,您将获得first
作为输出。