【问题标题】:Comparison operators that I haven't seen before [duplicate]我以前没见过的比较运算符 [重复]
【发布时间】:2013-09-17 12:16:53
【问题描述】:

我正在尝试破译以下 JavaScript 代码行:

delay_start = (typeof delay_start_qs !== "undefined") ? !(delay_start_qs === "false") : true;

特别是?,后跟!。那是比较运算符吗?

【问题讨论】:

  • 不,它是一个三元运算符,一种写 if 语句的简短方式
  • ? 是三元运算符的一部分,! 是应用于第一个分支结果的否定运算符,: 是三元运算符的第二部分。
  • 如果这应该关闭,为什么不这样-。 stackoverflow.com/questions/18774863/… ?? [一个真正的 RTFM 在答案中获得了令人难以置信的支持,并且之前肯定被问了 100 次] 这似乎相当随机,而且非常不清楚人们如何以及何时投票结束。

标签: javascript


【解决方案1】:

它是一个简单的三元运算符

delay_start = (typeof delay_start_qs !== "undefined") 
                                ? !(delay_start_qs === "false") : true;

让我们打破它..

(typeof delay_start_qs !== "undefined") // 如果 delay_start_qs 未定义

如果上述条件为真那么delay_start = !(delay_start_qs === "false") ;

否则delay_start = true;

同样可以写成for循环

if(typeof delay_start_qs !== "undefined") {
    delay_start = !(delay_start_qs === "false") ;
} else {
    delay_start = true;
}

【讨论】:

  • 啊,是的——非常感谢我明白了..
【解决方案2】:

是三元运算符。

value = condition ? <if condition is true statement> : <else statement>

【讨论】:

    【解决方案3】:
    x ? y : z
    

    将以上内容读作:

    if(x) {
      y;
    } else {
      z;
    }
    

    或:

    if x then y else z
    

    ! 表示not。它与? 无关。所以你看到的更像是这样的:

    if x then (not y) else z
    

    【讨论】:

      【解决方案4】:
      delay_start = (typeof delay_start_qs !== "undefined") ? !(delay_start_qs === "false") : true;
      

      一样
      delay_start = (typeof delay_start_qs !== "undefined") ? delay_start_qs !== "false" : true;
      

      因为当 x 和 y 都不是 NaN 时,!(x === y) 等价于 x !== y。和整体一样

      delay_start = (typeof delay_start_qs === "undefined") ? true : delay_start_qs !== "false";
      

      因为x ? y : z!x ? z : y 相同。和整体一样

      delay_start = (typeof delay_start_qs === "undefined") || delay_start_qs !== "false";
      

      因为x ? true : ytypeof x === "boolean" 时与x || y 相同。和整体一样

      if (typeof delay_start_qs === "undefined" || delay_start_qs !== "false") {
        delay_start = true;
      } else {
        delay_start = false;
      }
      

      因为a = x ? y : z; 是一个语句,它使用 x 来决定将 y 或 z 中的哪一个分配给 a。

      【讨论】:

      • 这是一个很好的细分——我正在按照步骤...
      猜你喜欢
      • 2016-11-12
      • 1970-01-01
      • 2011-03-10
      • 2012-01-26
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      相关资源
      最近更新 更多