【问题标题】:If statement with only a number in JavascriptJavascript中只有一个数字的if语句
【发布时间】:2015-02-07 10:56:20
【问题描述】:

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

代码如下:

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 语句?

【问题讨论】:

标签: javascript type-coercion


【解决方案1】:

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 传递的,那么这种方法可能会出现问题。

【讨论】:

    【解决方案2】:

    如果b 是:

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

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

    【讨论】:

    • 别忘了NaN:D
    • 添加了 NaN。我也想过添加 false ,但是... :)
    【解决方案3】:

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

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

    【讨论】:

    • x != 0是真实的可能更简洁(无论是消极的还是积极的)
    • @BradChristie NaN != 0; // true
    【解决方案4】:

    在 javascript 中,您可以通过将变量放在 if 语句中来检查变量是否已分配。如果它有一个值,它将为真(除非它的值为假或 0)。如果它没有值或评估为 null,它将返回 false。看起来他们在将其传递给函数之前验证它是否具有值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多