为什么在javascript中添加这些数字等于NaN?

时间:2017-10-04 12:06:24

标签: javascript

我正在尝试遍历此对象并为每个人添加值。为什么这会返回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);

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

这里的问题是什么?

5 个答案:

答案 0 :(得分:3)

您的变量未初始化为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);




答案 1 :(得分:1)

这是因为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);

答案 2 :(得分:0)

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

var res1 = 0, res2 = 0;

答案 3 :(得分:0)

将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 :(得分:0)

因为res1res2是不可取的。您应该将其声明为var res1=0, res2=0;

相关问题