在 Javascript 中只有一个数字的 if 语句

If statement with only a number in Javascript

本文关键字:if 语句 数字 有一个 Javascript      更新时间:2023-09-26

我发现这个函数可以将数字放入分数中,我试图弄清楚一切的含义。有一件事我无法弄清楚。

代码如下:

function reduce(numerator,denominator) {
  var gcd = function gcd (a,b) {
    if (b) {
      return gcd(b, a%b);
    } else {
      return a;
    }
  };
  gcd = gcd(numerator,denominator);
  return [numerator/gcd, denominator/gcd];
}

if (b)是什么意思。我知道如果 if 语句中只有变量,它会检查变量是真还是假。这将如何应用于数字?什么时候会转到 else 语句?

这与事物如何转换为布尔值有关,即某事是否真实

if (0 || NaN || undefined) {                // these are "falsy"
    // this never happens
} else if (1 /* or any other number*/ ){    // these are "truthy"
    // this happens
}

如果b是:

  • 0
  • null
  • undefined
  • NaN
  • 或空字符串""

它将被评估为假。否则,它将被评估为 true。

在javascript中,你可以通过将变量放在if语句中来检查变量是否被赋值。如果它有一个值,它将是真的(除非它的值是假或0)。如果它没有值或计算为 null,它将返回 false。看起来他们正在验证它有一个值,然后再将其传递到函数中。

语句

中的任何表达式if在计算之前都将隐式转换为boolean

在您发布的代码中,它通常用于检查是否传递了参数,在这种情况下,undefined是伪造值,将转换为 false 。AJPerez已经给出了关于虚假值的答案(除了他忘记了NaN)。

function reduce(numerator,denominator){
    var gcd = function gcd(a,b){
    if (b) {
        // if two arguments are passed, do something
        return gcd(b, a%b);
    }  
    else {
        // only one argument passed, return it directly
        return a;
    }
  };
    gcd = gcd(numerator,denominator);
    return [numerator/gcd, denominator/gcd];
}

但是,如果您正在检查的参数确实通过 falsy传递,则此方法可能会有问题。