2017-10-04 157 views
0

我想循环这个对象,并为每个人加起来的值。为什么这会返回NaN为什么在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);

如果我删除+然后我得到一个有效的数字后面,虽然,这只是一个单一的数字明显。

这里有什么问题?

+4

想一想,你的代码中第一个'+ ='之前'res1'的值是多少? – Teemu

+0

你没有启动变量导致'undefined + =' – tallberg

+0

'var res1 = 0;' – Liam

回答

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);

0

Proeprties res1res2undefined。如果您要向undefined添加一些数字,结果将为NaN。所以你需要用0值来初始化那些属性。

var res1 = 0, res2 = 0; 
+0

谢谢,明白了,但是他们被定义了,他们没有给他们赋值。 – ProEvilz

+0

如果你声明变量,但不给它赋值,它的值将是'undefined' –

+1

不,它们不是@ProEvilz undefined是javascript中的一个特殊类型/值 – Liam

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);

+0

谢谢,明白了,但他们被定义,他们只是没有分配给他们的价值。 – ProEvilz

+2

声明它们没有定义 – marvel308

+0

@ProEvilz然后将它们“未定义” –

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);

0

由于res1res2是undefiend。你应该像var res1=0, res2=0;

相关问题