2014-01-19 22 views
0

嘗試使用localStorage簡單地存儲變量,稍後以整數形式檢索它,將其添加到另一個整數然後再次存儲它。但是,它似乎將整數視爲字符串,並將數字連接起來。我曾嘗試使用JSON.stringify和解析,但它不起作用,我不明白爲什麼。 (變量hours絕對是一個整數)。localStorage連接Integer而不是添加

if (localStorage.getItem('hours_worked') === null) { 
     localStorage.setItem('hours_worked', JSON.stringify(hours)); 
    } 
else { 
     var temp_hours = JSON.parse(localStorage.getItem('hours_worked')); 
     var temp_hours1 = temp_hours + hours; 
     alert(temp_hours1); 
     localStorage.setItem('hours_worked', JSON.stringify(temp_hours1)); 
    } 

我敢肯定,我失去了一些東西真的很明顯,所以如果有人能指出來,我認爲將是非常美妙,非常感謝!

+0

你的JSON是怎樣的?似乎你有一個字符串,而不是一個數字。調用'parseInt(...,10)'或'Number(...)'。更好? – hgoebl

+0

謝謝,是的,我曾經玩過parseInt,但是之前無法使用它,感謝您指引我朝着正確的方向發展,現在它們都已經整理好了! – JamesF

回答

3

localStorage將所有內容視爲字符串。在將它用作Integer之前,必須先解析其值。

此外,您應該使用JSON Stringify將數組轉換爲字符串。你的可變小時數是一個Int,所以你不需要Stringify它。

if (localStorage.getItem('hours_worked') === null) { 
    localStorage.setItem('hours_worked', hours); 
} 
else { 
    var temp_hours = parseInt(localStorage.getItem('hours_worked'),10); 
    var temp_hours1 = temp_hours + hours; 
    alert(temp_hours1); 
    localStorage.setItem('hours_worked', temp_hours1); 
} 
+0

嗨,謝謝,這幾乎是完美的。但是,現在說temp_hours是NaN。任何想法如何彌補這一點? – JamesF

+0

這很奇怪,因爲它適用於我:http://jsfiddle.net/2Zy3U/你能爲你的問題添加更多信息嗎?在投入localStorage之前幾個小時的起源是什麼? (做一個警報(typeof小時);) – Kalzem

+0

只是做了警報(typeof小時)'它出現了字符串!我確定小時是一個int,因爲我之前對它進行了算術運算,所以它是如何創建的: 'var hours = $('#shift_end_time')。timepicker('getSecondsFromMidnight') - $('#shift_start_time') .timepicker( 'getSecondsFromMidnight'); if(hours <0){ hours + = 86400; (2);' } hours =(hours/3600) – JamesF