在下面的代码中:
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 中的每个表达式都可以被评估为trueorfalse因为每个类型都可以强制转换为布尔值。
在您的代码中,"test"操作数将被有效地评估为Boolean("test"),即true。
强制为 的值false是:
false (明显地)NaN"" (一个空字符串)0nullundefined其他一切都考虑在内true。
如果||左侧为真,则运算符返回左侧,否则返回右侧。
因此(false || "test")是"test"。
"test"是一个真实的价值,所以你得到:
"test" ? "first" : "second"
:如果前面的值?是真值(即是),则三元运算符返回前面的值。
当条件运算符无法将表达式计算为 True 或 False 时,通常会发生什么?
任何表达式的结果都可以被评估为真值或假值,因此这永远不会发生。
因为 Javascript 隐式转换test为true. 在将字符串转换为布尔值时,Javascript 将非空字符串转换为 ,将空字符串转换true为false.
因此,由于运算符的第一个操作数||是false,因此false || "test"表达式将返回第二个参数,然后将其转换为 true。所以你会得到first你的输出。