我无法理解这句话:

时间:2015-08-02 21:52:07

标签: javascript while-loop

我无法理解这句话:

while (a && b) {
a > b ? a %= b : b %= a;
}

它到底做了什么?它可以转换为if语句吗?

4 个答案:

答案 0 :(得分:2)

让我们把它分解成几部分:

while (a && b) {

}

这意味着ab是" truthy"值(在这种情况下,不是0)然后循环将继续:

a > b ? a %= b : b %= a;

这是一个三元运算符:x ? y : z

如果x的计算结果为true,则执行y。如果x评估为false,请执行z

因此,在这种情况下如果a > b为真,

a %= b将会运行。 a %= ba = a % b的缩写。

如果a > b为false,

b %= a将会运行。同样,b %= ab = b % a的缩写。

因此,循环将继续运行,直到ab等于0。

答案 1 :(得分:2)

您的代码使用Euclid's algorithm计算ab的最高公因子。

它使用三元运算符代替if语句和其他难以理解的可爱。

a ? b : c是一个表达式,如果b是真实的,则评估为a,否则为c。请注意,它是一个带有值的表达式,并且使用它纯粹用于副作用或复杂计算时使用if语句会更清晰。

while条件中的a && b可确保在ab为零后循环停止。

a %= b相当于a = a % b,其中%是余数运算符。

如果您不熟悉这种语法,可能值得阅读MDN's JavaScript Guide

答案 2 :(得分:0)

您可以轻松扩展if if:

while (a && b) {
  if (a > b) {
    a %= b;
  } else {
    b %= a;
  }
}

%=表示使用右侧的mod,并将结果分配到左侧。

答案 3 :(得分:0)

这是一个三元运算符,使用方法如下:

条件? value_if_true:value_if_false

(a> b)? (a%= b):( b%= a)

while (a && b) {
    if ( a > b ) {
        a %= b 
    }else{
        b %= a;
    }
}