2017-10-04 57 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;

相關問題