【问题标题】:Weird ternary operator Javascript奇怪的三元运算符 Javascript
【发布时间】:2012-01-23 02:12:32
【问题描述】:

我试图了解三元运算符的工作原理,我遇到了这个例子:

b.d >= mystr.length && (function1(b, a), a=0);

&& 是什么意思?它像 AND 运算符一样使用吗?这如何转化为常规语句? a=0 之前的昏迷是什么意思?谢谢!

【问题讨论】:

  • 这不是三元运算符。
  • && 是 AND,就像在许多语言中一样。而且,stackoverflow.com/q/8916679/422184 的副本
  • 这是荒谬的不可读代码。谁写这样的代码? ಠ_ಠ

标签: javascript ternary


【解决方案1】:

这不是三元。

此外,该分组运算符中的逗号基本上确保该组将始终返回最后一个表达式 a=0 的值,即 0。

该示例将始终评估为假或 0(这是假的)。

编辑:

为了完整起见,这里是一个三元运算符:

a > b ? functionIfTrue() : functionIfFalse();

逻辑上等同于:

if ( a > b ){
    functionIfTrue();
} else {
    functionIfFalse();
}

【讨论】:

  • 谢谢。你能告诉我它看起来像一个正常的陈述吗? ">=" 是什么意思?那不是三元运算符吗?函数在什么条件下被调用?
  • >= 表示“大于或等于”。三元运算符是一种编写 if/else 语句的速记方式。在这种情况下,只有当mystr.length 小于b.d 的值时,function1 才会被调用。如果mystr.length 不小于b.d,则&& 之后的其余语句无关紧要,因此不会被评估。
【解决方案2】:

&& 是 AND 运算符。如果左边为真,则评估右边(并返回)。 , 是逗号运算符。 (逗号运算符评估其两侧,从左到右,并返回右侧)。所以这段代码是这样的:

if (b.d>=mystr.lengh) {
 function1(b,a);
 a=0;
}

(除了你的代码返回0)

(我的母语是C,所以也许我错了,但我认为在这种情况下,javascript 像 C 一样工作)

【讨论】:

    【解决方案3】:

    && 运算符是逻辑与运算符。它从左到右计算表达式并返回第一个 false 值或最后一个表达式的值..

    如果它到达最后一个表达式,它会返回它的值,不管它是什么。

    所以:

    var x = (1 < 2) && ( 4 > 3) && 'fred';
    

    x 设置为“fred”,而:

    var y = (1 < 2) && 0 && 'fred';
    

    y 设置为 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-29
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2017-05-28
      相关资源
      最近更新 更多