JavaScript中的条件运算符,当无法计算true / false时

时间:2012-10-02 13:15:36

标签: javascript

在下面的代码中:

  

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

第一部分的o / p是测试(假||“测试”),那么我的最终o / p如何?当条件运算符无法将表达式计算为True或False时,通常会发生什么?

5 个答案:

答案 0 :(得分:3)

||是OR。因此,当需要布尔值时,(false || "test")等同于"test"。当需要布尔值时"test"被强制为true0不会,""不会,"0"会被视为{{ 1}})。

ECMAScript规范中的

As seentrue使用toBoolean将条件转换为布尔值:

enter image description here

答案 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中的每个表达式都可以评估为truefalse,因为每种类型都可以强制转换为布尔值。

在您的代码中,"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

因此,由于||运算符的第一个操作数是falsefalse || "test"表达式将返回第二个参数,然后将其转换为true。因此,您将获得first作为输出。