2015-07-11 38 views
-1
arr = ["1","2"]; 

$.each(arr,function(i,obj){ 
       sum += parseInt(obj); 
}); 
console.log(sum); 

我預計總和爲3,但結果爲12?我以爲parseInt已經完成了這項工作?這裏有什麼問題?parseInt在迴路中工作不正常

+3

它是concatinating 1和2 –

+0

您的代碼按預期工作,https://jsbin.com/qedofehebo/edit? HTML,JS,控制檯 –

回答

2

行爲不同的是你如何初始化和

if var sum = 0; -> result will be as expected i.e. 3 

if var sum = ""; -> result will be 12 as coming because sum is string 
1

這裏的工作代碼

var arr = ["1","2"]; 
    var sum=0; 
    $.each(arr,function(i,obj){ 
        sum += parseInt(obj); 
    }); 
    alert(sum); 
1

@Alice許你的代碼是不是其實不正確。這是同時另外

sum += parseInt(obj); 

對象轉換成整數,但隨後再次到該字符串得到治療爲空字符串,所以這裏總和爲字符串類型的問題,因爲在你的代碼和變量在此之前的某個地方。所以我們得到的是1和2的連接,如你所指出的,它是「12」。如果初始化和爲零,那就好了。

我已經運行你的代碼,並得到NaN作爲輸出,因爲我沒有初始化總和。看起來你正在將它初始化爲「」,因爲你輸出的是「12」。

0

使用JavaScript:

function sumArray(array) { 
    var sum = 0; 
    for (var i = 0; i < array.length; i++) { 
     sum += parseInt(array[i]); 
    } 
    return sum; 
} 
var sum = sumArray(['1', '2', 3]); 

使用JavaScript Array.reduce方法:

var array = ['1', '2', 3]; 
var sum = array.reduce(function(a, b) { return a + parseInt(b); }, 0);