【问题标题】:Conditional operator using a int value使用 int 值的条件运算符
【发布时间】:2018-03-02 08:11:00
【问题描述】:

我遇到了一个让我头晕目眩的声明。

假设 x >= 0

(x - 1 ? 16:11)

显然这段代码的响应与

(x > 1 ? 16:11)

有人可以解释减号是如何工作的吗?我认为条件运算符必须提供真或假结果。我不明白整数如何适合条件运算符。

【问题讨论】:

  • 您可以将任何内容放入条件中,然后将其强制转换为布尔值。

标签: javascript conditional-operator


【解决方案1】:

在代码中:

(x - 1 ? 16 : 11)

如果x 等于1,则x - 10 并且0 是虚假的,因此表达式的计算结果为11。否则,x - 1 为真,表达式的计算结果为 16

【讨论】:

  • 我正要写同样的东西
  • 关于什么是 falsy 的更多信息,请参阅:developer.mozilla.org/en-US/docs/Glossary/Falsy
  • 为什么开发人员更喜欢写这个而不是相等运算符?相等运算符不是“更安全”吗?
【解决方案2】:

您可以使用一些值来了解发生了什么。

 x - 1 ? 16 : 11

-1 - 1              -2 truthy -> 16
 0 - 1              -1 truthy -> 16
 1 - 1               0 falsy  -> 11
 2 - 1               1 truthy -> 16
 3 - 1               2 truthy -> 16

基于此,条件可以改写为

 x !== 1 ? 16 : 11

【讨论】:

    【解决方案3】:

    条件运算符正在计算表达式的结果。

    假设x = 2 结果是:

    2 - 1 = 1 2 > 1 = true

    假设x = 1 结果是:

    1 - 1 = 0 1 > 1 = false

    0 将被视为false1true

    所以两个表达式的结果是一样的。

    但请注意: 如果您确实使用负数,则表达式会有不同的结果,因为条件运算符会将负数视为true

    -3 - 1 = -4 => true

    -3 > 1 = false

    【讨论】:

    • nitpick:它是“条件运算符”,它只是可能的三元运算符之一(意思是:3 个操作数)。不是说我知道任何其他人,但是...
    • 谢谢!我改变了答案。
    【解决方案4】:

    条件语句中大于0或小于0的值被视为true,零被视为false

    (1)?"true": "false";
    (0)?"true": "false";
    

    console.log((-1)? "true": "false");
    console.log((1)? "true": "false");
    console.log((0)? "true": "false");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-11
      • 2018-06-09
      • 1970-01-01
      • 2011-03-11
      • 2013-07-28
      • 1970-01-01
      • 2013-06-18
      • 2019-04-19
      相关资源
      最近更新 更多