1

在下面的代码中:

console.log( (false || "test") ? "first" : "second") );

第一部分的 o/p 是 test (false || "test") ,那么我最后的 o/p 怎么样呢?当条件运算符无法将表达式计算为 True 或 False 时,通常会发生什么?

4

5 回答 5

3

||是或。所以当需要一个布尔值时,(false || "test")相当于"test". 并且在需要布尔值时"test"被强制(不会,不会,但会被视为)。true0"""0"true

正如ECMAScript 规范中所见, an使用toBooleanif将条件转换为布尔值:

在此处输入图像描述

于 2012-10-02T13:16:53.900 回答
1

javascript 中的每个值,无论其类型如何,都可以强制转换为布尔值。

强制要求false的值称为“假”,强制要求true的值称为“真”。

这是一个演示这种强制的小提琴。

在这种情况下:

(false || "test") ? "first" : "second")

(false || "test")逻辑上等价于("test")sincefalse || X等价于(如果您对逻辑感兴趣,X这称为析取三段论)。

javascript 中的任何非空字符串(包括 string 'false',对那个 bug 有乐趣)都会强制转换为true,因此第三条件评估为true并记录'first'

于 2012-10-02T13:19:05.760 回答
0

“当条件运算符无法将表达式评估为 True 或 False 时,一般会发生什么?”

JavaScript 中的每个表达式都可以被评估为trueorfalse因为每个类型都可以强制转换为布尔值。

在您的代码中,"test"操作数将被有效地评估为Boolean("test"),即true

强制为 的值false是:

  • false (明显地)
  • NaN
  • "" (一个空字符串)
  • 0
  • null
  • undefined

其他一切都考虑在内true

于 2012-10-02T13:16:50.950 回答
0

如果||左侧为真,则运算符返回左侧,否则返回右侧。

因此(false || "test")"test"

"test"是一个真实的价值,所以你得到:

"test" ? "first" : "second"

:如果前面的值?值(即是),则三元运算符返回前面的值。

当条件运算符无法将表达式计算为 True 或 False 时,通常会发生什么?

任何表达式的结果都可以被评估为真值或假值,因此这永远不会发生。

于 2012-10-02T13:17:45.113 回答
0

因为 Javascript 隐式转换testtrue. 在将字符串转换为布尔值时,Javascript 将非空字符串转换为 ,将空字符串转换truefalse.

因此,由于运算符的第一个操作数||false,因此false || "test"表达式将返回第二个参数,然后将其转换为 true。所以你会得到first你的输出。

于 2012-10-02T13:17:55.753 回答