【问题标题】:Why does adding these numbers equal NaN in javascript? [duplicate]为什么在javascript中添加这些数字等于NaN? [复制]
【发布时间】:2018-03-15 19:46:19
【问题描述】:

我正在尝试遍历这个对象并将每个人的值相加。为什么会返回NaN

var result = {
  "alex": {
    "1": 9.333333333333334,
    "2": 7.666666666666666,
    "3": 8.666666666666668,
    "4": 8.666666666666668,
    "5": 9.666666666666668,
    "6": 9,
    "7": 10,
    "8": 10,
    "9": 9.333333333333334,
    "10": 8.333333333333334,
    "11": 10,
    "12": 9.333333333333334
  },
  "frank": {
    "1": 9.666666666666668,
    "2": 10,
    "3": 9.333333333333334,
    "4": 9.333333333333334,
    "5": 9.333333333333334,
    "6": 9.333333333333334,
    "7": 8.666666666666666,
    "8": 9,
    "9": 9.333333333333334,
    "10": 8.666666666666668,
    "11": 7.666666666666666,
    "12": 8.666666666666668
  }
}


var res1, res2;
for (var key in result.alex) {
  res1 += parseInt(result.alex[key]);
}
for (var key in result.frank) {
  res2 += parseInt(result.frank[key]);
}

console.log("Res1: " + res1);
console.log("Res2: " + res2);

如果我删除+,那么我会得到一个有效的号码,但显然它只是一个号码。

这里有什么问题?

【问题讨论】:

  • 好好想想,你的代码中第一个+=之前的res1的值是多少?
  • 您没有启动导致undefined += 的变量
  • var res1 = 0;
  • @Teemu 掌心时刻。由于您实际上是第一个回答虽然间接的人,请将其添加为答案,我会接受它。
  • @ProEvilz 你不能,它有赞成的答案。所有的重复都不错,当有多个帖子时,更容易找到答案。

标签: javascript


【解决方案1】:

属性res1res2undefined。如果您向undefined 添加一些数字,结果将是NaN。因此,您需要使用 0 值初始化该属性。

var res1 = 0, res2 = 0;

【讨论】:

  • 谢谢,知道了,但是它们是被定义的,只是没有分配给它们的值。
  • 如果你声明了变量,但没有给它赋值,那么它的值就是undefined
  • 不,他们不是 @ProEvilz undefined 是 javascript 中的特殊类型/值
  • @ProEvilz 没错,你怎么给你不知道的东西加一个数字?
  • 好的,我的立场是正确的。我想既然它被写下来了,它就会在技术上被定义……就像定义/写下来的那样。你是对的。
【解决方案2】:

因为res1res2 是不受约束的。你应该像var res1=0, res2=0;一样声明它

【讨论】:

    【解决方案3】:

    将 res1 和 res2 初始化为 0,就像之后执行 += 一样。

    var result = {
      "alex": {
        "1": 9.333333333333334,
        "2": 7.666666666666666,
        "3": 8.666666666666668,
        "4": 8.666666666666668,
        "5": 9.666666666666668,
        "6": 9,
        "7": 10,
        "8": 10,
        "9": 9.333333333333334,
        "10": 8.333333333333334,
        "11": 10,
        "12": 9.333333333333334
      },
      "frank": {
        "1": 9.666666666666668,
        "2": 10,
        "3": 9.333333333333334,
        "4": 9.333333333333334,
        "5": 9.333333333333334,
        "6": 9.333333333333334,
        "7": 8.666666666666666,
        "8": 9,
        "9": 9.333333333333334,
        "10": 8.666666666666668,
        "11": 7.666666666666666,
        "12": 8.666666666666668
      }
    }
    
    
    var res1 = 0, res2 = 0;
    for (var key in result.alex) {
      res1 += parseInt(result.alex[key]);
    }
    for (var key in result.frank) {
      res2 += parseInt(result.frank[key]);
    }
    
    console.log("Res1: " + res1);
    console.log("Res2: " + res2);

    【讨论】:

      【解决方案4】:

      那是因为res1和res2是未定义的,直接定义为0

      var result = {
        "alex": {
          "1": 9.333333333333334,
          "2": 7.666666666666666,
          "3": 8.666666666666668,
          "4": 8.666666666666668,
          "5": 9.666666666666668,
          "6": 9,
          "7": 10,
          "8": 10,
          "9": 9.333333333333334,
          "10": 8.333333333333334,
          "11": 10,
          "12": 9.333333333333334
        },
        "frank": {
          "1": 9.666666666666668,
          "2": 10,
          "3": 9.333333333333334,
          "4": 9.333333333333334,
          "5": 9.333333333333334,
          "6": 9.333333333333334,
          "7": 8.666666666666666,
          "8": 9,
          "9": 9.333333333333334,
          "10": 8.666666666666668,
          "11": 7.666666666666666,
          "12": 8.666666666666668
        }
      }
      
      
      var res1=0, res2=0;
      for (var key in result.alex) {
        res1 += parseInt(result.alex[key]);
      }
      for (var key in result.frank) {
        res2 += parseInt(result.frank[key]);
      }
      
      console.log("Res1: " + res1);
      console.log("Res2: " + res2);

      【讨论】:

      • 谢谢,明白了,但是它们是被定义的,只是没有分配给它们的值。
      • 它们被声明为未定义
      • @ProEvilz 那么他们是'未定义'
      • @marvel308 是的,对不起,这就是我想说的。
      【解决方案5】:

      您的变量未初始化为 0。您正在向未初始化的变量添加数字。

      如下初始化res1和res2。

      var res1 = 0, res2=0;
      

      var result = {
        "alex": {
          "1": 9.333333333333334,
          "2": 7.666666666666666,
          "3": 8.666666666666668,
          "4": 8.666666666666668,
          "5": 9.666666666666668,
          "6": 9,
          "7": 10,
          "8": 10,
          "9": 9.333333333333334,
          "10": 8.333333333333334,
          "11": 10,
          "12": 9.333333333333334
        },
        "frank": {
          "1": 9.666666666666668,
          "2": 10,
          "3": 9.333333333333334,
          "4": 9.333333333333334,
          "5": 9.333333333333334,
          "6": 9.333333333333334,
          "7": 8.666666666666666,
          "8": 9,
          "9": 9.333333333333334,
          "10": 8.666666666666668,
          "11": 7.666666666666666,
          "12": 8.666666666666668
        }
      }
      
      
      var res1 = 0, res2=0;
      for (var key in result.alex) {
        res1 += parseInt(result.alex[key]);
      }
      for (var key in result.frank) {
        res2 += parseInt(result.frank[key]);
      }
      
      console.log("Res1: " + res1);
      console.log("Res2: " + res2);

      【讨论】:

        猜你喜欢
        • 2012-04-19
        • 1970-01-01
        • 2015-01-14
        • 1970-01-01
        • 1970-01-01
        • 2018-05-19
        • 2021-12-23
        相关资源
        最近更新 更多